目前分類:System Administrator (34)

瀏覽方式: 標題列表 簡短摘要

Oracle ERP 更新到 RUP7 之後, 開始改用 JRE 去跑 Oracle Form 與 Discoverer, 沒想到問題一堆, 目前碰到的問題有

- Oracle Form

1. IE 6 / 7 / 8 使用任一版本 JRE 都可以正常使用, 但是 Firefox 3.6 / Chrome 都無法正確啟動 JRE

    => 解法 : 將目前系統預設的 JRE 版本 (例如, 預設為 Java 1.6 Update 3), 將該版本的 dll 檔 (例如, npjpi160_03.dll) 複製到 Firefox 目錄下的 plugins 資料夾, 就可以正確啟動

    => Chrome 也可以使用相同的方式解決

2. 會有 Form Focus 問題 (Metalink Doc ID : 760250.1)

    => 大意是, 如果你的客製程式沒有依照 AOL 的標準, 就很有可能會踩到地雷, 不過, 就連 Oracle 自己有些畫面也沒有依照 AOL 的標準寫法, 所以連 Personalize 都有機會踩到

- Discoverer

1. 用 Java 1.6 Update 17 以上, 內容會出現亂碼, 但 Java 1.6 Update 16 是正常

Aloz 發表在 痞客邦 留言(0) 人氣()

今天使用 IE 開輸出格式為 XML 的報表, 可能是因為裡面有中文, 造成看不到 Output, 經過同事的指點, 將 FND: NATIVE CLIENT ENCODING 這個 Profile 修改為 UTF8 即可

註 : 看起來只是 View Output 問題, 其實資料面是正常的

Aloz 發表在 痞客邦 留言(0) 人氣()

昨天將 Firefox 升級為 3.6, 結果發現 Oracle EBS 開不起來了 @@"

結論就是, Firefox 3.6 只支援 JRE............

http://blogs.oracle.com/stevenChan/2010/01/firefox_36_ebs.html

Aloz 發表在 痞客邦 留言(3) 人氣()

公司最近將 JInitiator 改為 JRE, 在測試時發現, 如果使用 Google Chrome 瀏覽器時, 在看 Output 為 XML 格式的報表時, 會無法正確顯示, 查詢之後發現目前 DEV 版本已經可以正確顯示, 但公開版本仍有問題, 不過安裝擴充功能就可以了

XML Tree https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb

Aloz 發表在 痞客邦 留言(1) 人氣()

FND_PROFILE.VALUE 是很常用的 Function, 整理起來以後就不需要翻書了

(資料來源 : User Guide)

Aloz 發表在 痞客邦 留言(0) 人氣()

有變更到 Form Message 的設定 or 內容文字時, 不是改完存檔就沒事了, 變更完之後還要一個步驟

第一種作法 : Run Request > Generate Messages

Generate Messages

第二種作法 : 在 Form Server 上執行 FNDMDGEN APPS/APPS 0 Y US GUC DB_TO_RUNTIME

 

 

Aloz 發表在 痞客邦 留言(0) 人氣()

每個使用者都可以自定自己喜歡的日期呈現格式, 可使用 FND_PROFILE.VALUE ( 'ICX_DATE_FORMAT_MASK' ) 去抓取設定.

時間格式都是使用 HH24:MI:SS, 所以不用另外抓取設定

Example:

TO_CHAR(SYSDATE, FND_PROFILE.VALUE ( 'ICX_DATE_FORMAT_MASK' ) || ' ' || 'HH24:MI:SS'))

Aloz 發表在 痞客邦 留言(0) 人氣()

Subject: How to purge e-mail notifications from the workflow queue so the e-mail is not sent
  Doc ID: Note:372933.1 Type: HOWTO
  Last Revision Date: 03-JUL-2006 Status: PUBLISHED

In this Document
  Goal
  Solution


Applies to:

Oracle Workflow Cartridge - Version: 11.5.10
Information in this document applies to any platform.

Goal

The Workflow mailer has not been running. There are a large number of e-mail notifications accumulating in the queue.  How do we prevent these from being sent when the mailer is started.

Solution

Please take a backup before making any of these changes and try this on a Test instance first.

1. You need update the notifications you do not want sent, in the WF_NOTIFICATIONS table. 

Check the WF_NOTIFICATIONS table. Records where status = 'OPEN' and mail_status = 'MAIL' are notifications
that will have an e-mail notification sent.

SQL> select notification_id, status, mail_status, begin_date
from WF_NOTIFICATIONS
where status = 'OPEN' and mail_status = 'MAIL';

This should show you which notifications are waiting to be e-mailed.

You can use the BEGIN_DATE column to help narrow down the ones you do not want sent, if you only want to stop the e-mails from a specific date range.

To update a notification so that it will not get e-mailed. Set the MAIL_STATUS = 'SENT'. The
mailer will think the e-mail has already been sent and it will not send it again.. (Users can
still reply to the notification from the worklist page in the applications).

e.g. SQL> update WF_NOTIFICATIONS set mail_status = 'SENT' where mail_status = 'MAIL';
This will update all notifications waiting to be sent by the mailer.


2. Then run the script wfntfqup.sql to purge the WF_NOTIFICATION_OUT queue and rebuild it with
data currently in the WF_NOTIFICATIONS table. This is what purges all notifications waiting in the queue to be sent.
It will then populate the queue with the current data in the wf_notifications table.

Since you have changed the mail_status = 'SENT" it will not enqueue
these messages again.. Only the ones where mail_status = 'MAIL' and status = 'OPEN' will be
placed in the WF_NOTIFICATION_OUT queue and sent by the mailer.


wfntfqup.sql是在 $FND_TOP/patch/115/sql 之下

Aloz 發表在 痞客邦 留言(0) 人氣()

原本以為這會是偶發的狀況,沒想到上線之後幾乎是每天都有 User 碰到這樣的問題

目前確定以下狀況在輸入中文時會造成整個 Oracle ERP 當機 (應該是 Java 當掉):
1. 使用新注音的使用者,要做選字動作時,要先把字 "選" 起來再按 ↓,不然會當機
2. 使用舊注音或舊倉頡,如果注音符號或倉頡字碼在輸入時超過該欄最大字數,也會當機
    (這個好解一點,因為大部份會打很多中文字的欄位大多是備註欄,把該欄位拉長一點就可以)

謝謝 CK 提供的資訊, 我已順利的跟 Oracle Support 要到修改方式, 測試過也已經 OK, 再次感謝

ACTION PLAN
============
1. Edit the appsweb_<SID>_<machine>.cfg as follows:
* Backup the file pointed to by $FORMS60_WEB_CONFIG_FILE
* Edit this file
* Locate the line: networkRetries=0
* After networkRetries=0, add the following line:
inlineIME=false

2. Edit the appsbase.htm as follows:
* Backup the $OA_HTML/US/appsbase.htm file
* Edit $OA_HTML/US/appsbase.htm
* Locate the section labled "IE Section"
* At around line 430, add the parameter inlineIME as follows:
(Aloz: 此動作需重開 Apache )
...
// Separate the less-than character from PARAM to prevent Appletviewer
// from seeing these as param tags outside of an applet tag.
IEhtml += '<' + 'PARAM name=type value="' + xpluginmimetype + ' ">';
IEhtml += '<' + 'PARAM name=codebase value="' + xcodebase + '">';
IEhtml += '<' + 'PARAM name=code value="' + xcode + '">';
IEhtml += '<' + 'PARAM name=inlineIME value="' + false + '">';

Aloz 發表在 痞客邦 留言(5) 人氣()

  Doc ID: Note:433359.1 Type: REFERENCE
  Last Revision Date: 13-SEP-2007 Status: PUBLISHED

In this Document
  Purpose
  Scope
  Tracking Workflow Notification Event Messages
     Track Outbound Notification Event Message
     Track Inbound Notification Event Message 


Applies to:

Oracle Workflow Cartridge - Version: 11.5.2 to 12.1
Information in this document applies to any platform.

Purpose

The purpose is to provided a summarised steps on how to:

1) Track an Outbound Workflow Notification Event Message whenever such an event is raised but the end user does not receive the email

2) Track an Inbound Worklfow Notification Event Message whenever a notification is responded to and the transaction does not seem to progress further.

Scope

Applications DBAs

Support Analysts

Tracking Workflow Notification Event Messages

Track Outbound Notification Event Message

1. oracle.apps.wf.notification.send event is raised when a notification is sent.
   The event is raised with Notification ID as the event key.

2. The e-mail notification is sent only if all of following are true.

    i) Notification status is OPEN or CANCELED 

   ii) Notification mail_status is MAIL or INVALID

        SELECT status, mail_status
        FROM wf_notifications
        WHERE notification_id = '&nid';

   iii) Recipient Role has a valid e-mail address and notification preference is in the format MAIL% 

        SELECT email_address, 
        nvl(WF_PREF.get_pref(name, 'MAILTYPE'),notification_preference)
        FROM wf_roles
       WHERE name = upper('&recipient_role');

   iv) Workflow Deferred Agent Listener is running

   v) Workflow Notification Mailer is running

3. The message makes two stops before it is sent as e-mail. 

 Raised --> WF_DEFERRED Queue --> Processed by Deferred Agent Listener --> WF_NOTIFICATION_OUT Queue --> Processed by Notification Mailer and sent as e-mail

4. If an error occurs during dispatch of oracle.apps.wf.notification.send, the message is enqueued to WF_ERROR queue. The Error Agent Listener dispatches the ERROR subscription for oracle.apps.wf.notification.send that executes WF_XML.Error_Rule. 

5. Run $FND_TOP/sql/wfmlrdbg.sql for a notification id and check the status of the message in WF_DEFERRED and WF_NOTIFICATION_OUT queue.

    PROCESSED in WF_DEFERRED - The message is enqueued to WF_NOTIFICATION_OUT

    PROCESSED in WF_NOTIFICATION_OUT - The message is sent as e-mail

    READY in WF_DEFERRED - Check if Deferred Agent Listener is running

    READY in WF_NOTIFICATION_OUT - Check if Notification Mailer is running

6. Analysing outbound XML message for a notification id. The wfmlrdbg.sql output provides the XML message generated by WF_XML.Generate at the time the script is run. If the original XML message used by the mailer is required to be analyzed following SQL may be used.

    SELECT tab.user_data.text_lob text_lob
    FROM applsys.aq$wf_notification_out tab
    WHERE dbms_lob.instr(tab.user_data.text_lob,'&1') > 0
    /

7. Try rebuilding the WF_NOTIFICATION_OUT queue if necessary

The wfntfqup.sql script rebuilds the WF_NOTIFICATION_OUT queue by dropping and recreating
that queue, removing pending notification messages from the WF_DEFERRED queue, and
repopulating the WF_NOTIFICATION_OUT queue from the Oracle Workflow Notification System
tables.

Wfntfqup.sql Version >=115.9

If you have implemented Oracle Alert and the WF_NOTIFICATION_OUT queue contains any pending
alert e-mail messages, those messages must be processed before the queue can be rebuilt. The
wfntfqup.sql script checks the queue for any alert e-mail messages and, if it finds any, the
script returns an error message that specifies how many alert e-mail messages are pending
and indicates that these messages must be processed before the script can run.

Wfntfqup.sql Version <= 115.8

If you have implemented Oracle Alert and the WF_NOTIFICATION_OUT queue contains any pending
alert e-mail messages, those messages must be processed before the queue can be rebuilt. The
wfntfqup.sql script checks the queue for any alert e-mail messages and, if it finds any,
exits without performing any changes.

Stop Notification Mailer, rebuild Mailer Queue using $FND_TOP/patch/115/sql/wfntfqup.sql.

Track Inbound Notification Event Message 

1. Workflow Notification Mailer's inbound thread reads the response e-mail from IMAP inbox. It then parses the content and identifies the notification id using NID string in the response e-mail and it identifies the response it expects. Using this information it parses the e-mail and finds out the response value. Using this information it builds a XML message under event name oracle.apps.wf.notification.receive event and enqueues to WF_NOTIFICATION_IN.

2. Workflow Inbound Notifications Agent Listener listens to WF_NOTIFICATION_IN agent.

3. The inbound agent listener dispatches event oracle.apps.wf.notification.receive that executes WF_XML.RECEIVE rule function. This rule function parses the response XML and applies the response value to the corresponding notification. It then calls WF_NOTIFICATION.Respond that completes the Notification Activity and the complete flow following the Notification Activity till a blocking activity is encountered.

4. The message makes one stop before making it to the Notification Activity.

Inbox -> WF_NOTIFICATION_IN Queue --> Processed by Inbound Agent Listener --> Workflow Engine

5. Run $FND_TOP/sql/wfmlrdbg.sql for notification id and check the status of the message in WF_NOTIFICATION_IN queue.

6. wfmlrdbg.sql output also provides the Inbound XML message in the later 11i.ATG_PF.H RUP releases. If the XML message is not available following SQL may be used.

    SELECT tab.user_data.text_lob text_lob
    FROM applsys.aq$wf_notification_in tab
    WHERE dbms_lob.instr(tab.user_data.text_lob,'&1') > 0;
   
7. If there is an error during response event processing the message is enqueued to WF_ERROR queue. The Error Agent Listener dispatches the ERROR subscription for oracle.apps.wf.notification.receive event that executes WF_RULE.Error_Rule.

8. If there is an exception thrown from WF_NOTIFICATION APIs when the response is applied, the Inbound Agent Listener sets the mail_status of the notification to INVALID and raises event oracle.apps.wf.notification.send that results in the INVALID response e-mail sent to the respoder.

Aloz 發表在 痞客邦 留言(0) 人氣()

前陣子,也是 User 提出的需求,他希望能夠用 Excel 把資料倒進 Oracle,雖然 Oracle 有 SQL Loader,但是對 User 來說,那不是一個簡單的東西,所以呢,他想要「直接」用 Excel。

雖然可以使用 ODBC 或者 ADO,但是顧問告訴我們一個小東西 : OO4O

OO4O 簡介
(Oracle Object For Ole),Oracle 所提供的 Native OLEDB Driver,效能比 ADO 好

就衝著它比 ADO 效能更好,就在 Excel VBA 中實現它吧。

不過,也沒人教怎麼用 Orz
在 Google 找半天的結果,給我翻到了一個日文網頁,剛好有寫用法

參考網址 : http://homepage1.nifty.com/shimajun/ora.htm
原文如下 :

VisualBasic から OO4O を使って、表にアクセスしてみる(その他更新編)


Select 編は、読んでいただけましたか?Dynaset を使用する方法と、Bind を使用した参照方法、2つを書きました。
単なる1レコードの読みこみ(照会)だけならば、Dynaset で十分です。コーディングも短いですし、気軽に使えます。

ようは、適材適所というか、○鹿の一つ覚えのように、Dynaset を使うのはダメということです。

さて、参照の次は当然、更新,追加,削除です。参照を含めて、この4つが使えれば、大体のPGは問題なく作成できます(よね?)

1.Dynaset を使う

参照の時に使った、Dynaset を用いて、更新,追加,削除をしましょう。
--------------------------------------------------------------------------------
Dim W_Sql   As Object
Dim W_Dyna As Object

W_Sql = "select item1 from tblA"

Set W_Dyna = OraDatabase.dbCreateDynaset(W_Sql,&H0&)

W_Dyna.dbEdit '(A)
W_Dyna.fields("item1") = "ABC" '(B)
W_Dyna.dbUpdate '(C)
--------------------------------------------------------------------------------
簡単です。超が付くほど。

(A) では、「これからレコードの編集をするぞ」と宣言し、
(B) にて、更新対象の項目に、値をセットし、
(C) で、更新を実行しています。

更新処理(Update) を行うには、dbUpdate メソッドを、Dynaset に対して実行してやれば良いのです。
(当然、カレントレコードが対象になります)

なにも考えてないコーディングですが、これだけで更新できます。実際にはもっと項目が多いですから、
コーディングは煩雑ですけど。

追加の場合はこうです。
--------------------------------------------------------------------------------
Dim W_Sql   As Object
Dim W_Dyna As Object

W_Sql = "select item1 from tblA"

Set W_Dyna = OraDatabase.dbCreateDynaset(W_Sql,&H0&)

W_Dyna.dbAddNew '(A)
W_Dyna.fields("item1") = "ABC" '(B)
W_Dyna.dbUpdate '(C)
--------------------------------------------------------------------------------
更新の時と、そう差が有りません。
dbEdit メソッドが、dbAddNew メソッドに変わるだけです。最終的に、(C)の dbUpdate を実行した時点で、
Insert されます。

さらに、削除の場合は、こうです。
--------------------------------------------------------------------------------
Dim W_Sql   As Object
Dim W_Dyna As Object

W_Sql = "select item1 from tblA"

Set W_Dyna = OraDatabase.dbCreateDynaset(W_Sql,&H0&)

W_Dyna.dbDelete '(A)
--------------------------------------------------------------------------------
これはもう、こんなんで良いんでしょうか、っていうくらい簡素なコードです。
これで簡単に削除されてしまうレコードは、カワイソウになってきます。

2.Dynaset を使わない更新操作

当然、Dynaset を使用しなくても、更新や追加,削除は可能です。
1件ずつの更新や削除なら、Dynaset でも良いと思います。しかし、まとめて更新や削除するとき
には、いちいち Dynaset を使う必要はありません。

SQL 文を実行するために、dbExecuteSQL メソッドを使います。
例を見ていただくと、一目瞭然でしょう。

(1)更新

Dim W_Sql        As String

W_Sql = "update "
W_Sql = W_Sql & "tblA "
W_Sql = W_Sql & "set "
W_Sql = W_Sql & "item1 = 'AAA'"
W_Sql = W_Sql & "where "
W_Sql = W_Sql & "item2 = '123'"

OraDatabase.dbExecuteSQL(W_Sql)

(2) 削除

Dim W_Sql        As String

W_Sql = "delete from "
W_Sql = W_Sql & "tblA "
W_Sql = W_Sql & "where "
W_Sql = W_Sql & "item2 = '123'"

OraDatabase.dbExecuteSQL(W_Sql)

いかがでしょうか。更新用の SQL 文を作成して、dbExecuteSQL にて実行するだけです。
簡単ですね。
対象が1件だけなら、Dynaset と変わりないかも知れませんが、複数件有るときはとても
便利です。

Aloz 發表在 痞客邦 留言(3) 人氣()

有時候不知道 User 是太聰明還是怎樣的,就是會改到一些不該改的
為了避面慘劇發生,能擋能防的就全上吧 XD

先防止 User 自行修改 Profile 吧....

Responsibility : System Administrator
Path : Security > Responsibility > Define

把 User 用的 Responsibility 找出來之後,在 Menu Exclusions 增加一列 : Personal Profile Value
如此一來,User 就沒有辦法自行修改 Profile 囉

Aloz 發表在 痞客邦 留言(0) 人氣()

如下為 11.5.10 版本以上可用的 FNDLOAD 語法, 可將各種設定 Download 轉出為 .ldt 的檔案搬移此檔案到新的環境再透過 Upload 的語法就能完成設定

在導入階段多個環境間 (Test/Pilot-Run/Prod) 進行設定時非常有幫助

 

Aloz 發表在 痞客邦 留言(0) 人氣()

第一篇 

在 Oracle ERP 中,很多 Java Form 都提供給 User 自訂畫面 Layout,不論是欄位的位置,或是呈現與否,都可以自己決定。

不過對一開始使用的 User 來說,不是那麼容易上手;或者這個畫面本身就需要統一的修改與套用,可能會需要由同一個人維護 Folder,其他 User 只能用就可以了。

這個功能可以幫助 User (IT) 針對每個 Responsibility 指定預設的 Folder Name

Path : System Administrator > Administer > Application > Administer Folders

Aloz 發表在 痞客邦 留言(0) 人氣()

«12
Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼