IFS/ドキュメント管理は、特別に記述されたマクロを使用してコンピュータ ファイルを自動的に起動できます。マクロは、印刷、編集、表示、チェックイン、チェックアウトなどのコマンドに関連付けられることが多いです。通常、編集または表示アプリケーションが起動され、マクロが実行されてから、ドキュメントに対する通常の作業を実行できます。マクロは、ドキュメントヘッダやフレームの挿入、データベースからの情報によるドキュメントの更新など、さまざまな用途で使用されます。
異なるアプリケーションでドキュメントを編集したり、ドキュメントをプリンタで印刷するなど、異なる作業(処理)を行うために、さまざまなマクロを使用できます。
定義済みのマクロを無効にするには、特定のドキュメントクラスプロセスのマクロオプションフィールドで「NoMacro」をドキュメントクラスプロセスのアクションとして設定します。
ドキュメントマクロは、IFS Aurena Agent を使用します。Aurena Agent をサポートするファイル操作について詳しくは、「ドキュメント管理における Aurena Agent の使用方法」をご覧ください。
VB スクリプトと JavaScript は、マクロを記述するために使用できるプログラミング言語です。VBScript が推奨される言語ですが((すべての例は VBScript で書かれています)、JavaScript でもご自由にお試しください。
マクロ ブロックは、マクロ コード自体が格納される場所です。通常、各ブロックにいくつかのサブまたは関数を作成し、それらをできるだけ汎用的にして、複数のマクロで使用できるようにします。
新しいマクロ ブロックは、スクリプト言語のブロック名とコードにユーザーが希望する名前を付けることで、[マクロベーシック/ ドキュメントマクロブロック] タブで定義されます。
マクロ ヘッダでは、マクロをどのファイルタイプ/アプリケーションで使用するか、またどのプロセス (VIEW、CHECKIN、 CHECKOUT など) に使用するかを指定します。新しいマクロ ヘッダは、[マクロベーシック/ドキュメントマクロ] タブで定義されます。マクロ ヘッダはそれ自体では何も実行しないため、マクロ ブロックを接続する必要があります。
フィールド | 説明 |
タイムアウト | マクロを実行する最大秒数です。マクロの実際の実行時間が指定した値よりも長い場合、実行を継続するかどうかの確認を求めるメッセージが表示されます。 |
アクション | 常に入力する必要がありますが、ファイルタイプ/アプリケーションとプロセスの特定の組み合わせに対して複数のマクロを作成する場合にのみ、存在する理由が明らかになります。 |
スクリプト言語 | 使用するマクロ言語を指定するために使用されます。テスト済みで動作確認済みの VBScript の使用をお勧めします。JavaScript を使用すると、場合によっては動作しないことがあります。 |
メイン関数 | メイン関数フィールドはとても重要です。マクロの起動時に呼び出すサブプロシージャまたは関数をマクロ実行エンジンに正確に指示します。 |
ここで、マクロ ヘッダにコードを添付して、実際に何が起こるかを指定します。マクロ ブロックは、[マクロベーシック/ドキュメントマクロ] タブのヘッダに接続されます。
すでに作成済みのマクロヘッダについては、テーブルに新しい行を作成してマクロブロックを接続します。値のリストを使用してマクロ ブロックを選択するか、名前を手動で入力します。
これは、ドキュメント クラスプロセスアクションで実行されます。可能な設定は次のとおりです。
これらの設定はオプションであり、ドキュメントクラスプロセス アクションを指定しない場合は、マクロが常に実行されます (使用可能な場合)。
ドキュメントクラスマネージメントの [マクロ] タブを使用して、ドキュメントクラス内のプロセスに適用されるマクロを登録します。クラスごとにマクロが定義されていない場合は、すべてのマクロが使用可能になります。
これは、接続されたプロセスが実行されたときにメッセージ ボックスを開くマクロの例です。
マクロブロック MESSAGEBOXTEST:
Public Sub MessageBoxTest() MsgBox "これはとても単純なマクロです。"End Sub
マクロクリエータには、マクロサポート機能を使用してマクロを作成する際に使用できる属性の長いリストがあります。属性の完全なリストと説明は次のとおりです。
ClientScript 値は、データベースから取得されない値に対して使用されます。
LOCAL_FILE_X - X は 1 から始まり、別のマクロ属性である LOCAL_FILE_COUNT で指定された数値で終わる数値になります。たとえば、 LOCAL_FILE_COUNT = 2 の場合、 LOCAL_FILE_1 と LOCAL_FILE_2 が存在します。LOCAL_FILE_X インスタンスには、チェックインされるファイルのクライアント側ファイル名が含まれます。
LOCAL_FILE_COUNT - チェックインするファイルの数 (例原本、ビュー、ラスター、ハイブリッドなど) です。
CHECK_OUT_PATH - ユーザ設定ダイアログボックスに入力されたユーザー定義のチェックアウトパスです。VIEWおよびPRINTプロセスには Temp\ が追加されます。
CHECK_IN_PATH - ファイルがチェックインされるディレクトリパスです。
EXTERNAL_VIEWER - ユーザ設定ダイアログボックスで定義されたユーザー定義の外部ビューアーのパスです。
REDLINE_VIEWER -ユーザ設定ダイアログボックスで定義されたユーザー定義のレッドライン ビューアー アプリケーションパスです。
COPY_TO_PATH - ファイルがコピーされるディレクトリのパスです。この値は、ドキュメントファイルのコピー プロセスでのみ使用できます。
COPY_TO_FILE_COUNT - コピーされたファイルの数です。この値は、ドキュメントファイルのコピー プロセスでのみ使用できます。
COPY_TO_FILE_NAME_N - N は 1 から始まり、 COPY_TO_FILE_COUNT で指定された数値で終わる数値になります。COPY_TO_FILE_NAME_N インスタンスには、コピーされたファイルの名前が含まれます。この値は、ドキュメントファイルのコピー プロセスでのみ使用できます。
使用例:
ClientScriptValues.Item("LOCAL_FILE_COUNT")
上記の式はローカルファイルの数を返します。
次のマクロブロックを使用して、ドキュメントァイルのコピー プロセスに関連するマクロ属性を取得できます。
'<<<<<<<<<ブロック名:VIEW_COPY_FILE_INFO >>>>>>>> Public Sub MacroInfo() sCopyPath = "パスコピー - " & ClientScriptValues.Item("COPY_TO_PATH").Value nCopyFileCount = ClientScriptValues.Item("COPY_TO_FILE_COUNT").Value sCopyFileCount = "ファイルカウント- " & nCopyFileCount For Index = 1 To nCopyFileCount sItem = "COPY_TO_FILE_NAME_" & Index sItemVal = ClientScriptValues.Item(sItem).Value sFileList = sFileList & sItemVal & vbCrLf Next sMsgTitle = "ファイルコピーマクロ情報" sMsg = sCopyPath & vbCrLf & sCopyFileCount & vbCrLf & vbCrLf & "ファイル リスト - " & vbCrLf & sFileList MsgBox sMsg, 0, sMsgTitle End Sub
スクリプト値はデータベースから取得されます。
DOCUMENT_CLASS
DOCUMENT_CLASS_DESCRIPTION
DOCUMENT_NUMBER
DOCUMENT_SHEET
DOCUMENT_REVISION
APPROVAL_TEMPLATE_ID
REVISION_NUMBER
REVISION_TEXT
REVISION_DATE
LANGUAGE_CODE
DOCUMENT_REVISION_NOTE
RESPONSIBLE_DEPARTMENT
RESPONSIBLE_PERSON
NUMBER_OF_SHEETS
DATE_RELEASED
DATE_OBSOLETE
ACCESS_CONTROL
ACCESS_CONTROL_DB
PLANNED_START
PLANNED_FINISH
ACTUAL_FINISH
FORMAT_SIZE
FORMAT_SIZE_DESCRIPTION
DATE_MODIFIED
MODIFIED_BY
MODIFIED_BY_NAME
DATE_CREATED
CREATED_BY
CREATED_BY_NAME
DAYS_TILL_DOCUMENT_EXPIRES
REASON_FOR_ISSUE
REASON_FOR_ISSUE_DESC
UPDATE_ALLOWED_DURING_APPROVAL
OBJSTATE
DOCUMENT_STATUS
DOCUMENT_PROGRESS
MAX_REVISION_NUMBER
MAX_APPROVED_REVISION_NUMBER
DOCUMENT_TITLE
DOCUMENT_TITLE_INFO
DESCRIPTION1
DESCRIPTION2
DESCRIPTION3
DESCRIPTION4
DESCRIPTION5
DESCRIPTION6
NEXT_DOC_SHEET
SHEET_ORDER
SCALE
VIEW_FILE_REQUIRED
VIEW_FILE_REQUIRED_DB
OBJECT_CONNECTION_REQUIRED
OBJECT_CONNECTION_REQUIRED_DB
DESTROY_DOCUMENT
DESTROY_DOCUMENT_DB
SAFETY_COPY_REQUIRED
SAFETY_COPY_REQUIRED_DB
DOCUMENT_TITLE_DATE_CREATED
DOCUMENT_TITLE_CREATED_BY
ISO_CLASSIFICATION
CONFIDENTIAL
BASED_ON_DOCUMENT_CLASS
BASED_ON_DOCUMENT_NUMBER
BASED_ON_DOCUMENT_REVISION
REPLACED_BY_DOCUMENT_CLASS
REPLACED_BY_DOCUMENT_NUMBER
ALTERNATE_DOCUMENT_NUMBER
DOC_TYPE
FILE_NAME
LOCAL_PATH
LOCAL_FILE_NAME
COPY_OF_FILE_NAME
COPY_OF_VIEW_FILE_NAME
CHECKED_IN_SIGN
CHECKED_IN_DATE
CHECKED_OUT_SIGN
CHECKED_OUT_DATE
LOCATION_NAME
FILE_TYPE
PATH
EDM_STATUS
DOC_CLASS
DOC_NAME
DOC_NO
DOC_SHEET
DOC_REV
FILE_STATE
REV_NO
ステータス
タイトル
USER_CREATED
DT_CRE
LOCATION_USER
LOCATION_PASSWORD
LOCATION_ADDRESS
LOCATION_PORT
LOCATION_TYPE
NUMBER_OF_FILES
LOCAL_FILE_NAME_01
LOCAL_FILE_NAME_02
LOCAL_FILE_NAME_03
...
COPY_OF_FILE_NAME_01
COPY_OF_FILE_NAME_02
COPY_OF_FILE_NAME_03
...
RIGHTS
IFS_CAD_DB_ALIAS
FND_USER
FIRSTREV_DRAWN_BY
FIRSTREV_ISSUED
FIRSTREV_CHECKED_BY
FIRSTREV_CHECKED
FIRSTREV_APPROVED_BY
FIRSTREV_APPROVED
FOLDER_IDENTIFIER
説明
FOLDER_NAME
RESPONSIBLE_PERSON
RESPONSIBLE_PERSON_NAME
REV_00
REV_00_DATE
REV_00_REASON
REV_00_REASON_DESC
REV_00_REV_TEXT
REV_00_DRAWN_BY
REV_00_APP_SIGN_01
REV_00_APP_DATE_01
REV_00_APP_SIGN_02
REV_00_APP_DATE_02
OLD_REV_01
OLD_REV_01_DATE
OLD_REV_01_REASON
OLD_REV_01_REASON_DESC
OLD_REV_01_REV_TEXT
OLD_REV_01_DRAWN_BY
OLD_REV_01_APP_SIGN_01
OLD_REV_01_APP_DATE_01
OLD_REV_01_APP_SIGN_02
OLD_REV_01_APP_DATE_02
OLD_REV_02
OLD_REV_02_DATE
OLD_REV_02_REASON
OLD_REV_02_REASON_DESC
OLD_REV_02_REV_TEXT
OLD_REV_02_DRAWN_BY
OLD_REV_02_APP_SIGN_01
OLD_REV_02_APP_DATE_01
OLD_REV_02_APP_SIGN_02
OLD_REV_02_APP_DATE_02
OLD_REV_03
OLD_REV_03_DATE
OLD_REV_03_REASON
OLD_REV_03_REASON_DESC
OLD_REV_03_REV_TEXT
OLD_REV_03_DRAWN_BY
OLD_REV_03_APP_SIGN_01
OLD_REV_03_APP_DATE_01
OLD_REV_03_APP_SIGN_02
OLD_REV_03_APP_DATE_02
OLD_REV_04
OLD_REV_04_DATE
OLD_REV_04_REASON
OLD_REV_04_REASON_DESC
OLD_REV_04_REV_TEXT
OLD_REV_04_DRAWN_BY
OLD_REV_04_APP_SIGN_01
OLD_REV_04_APP_DATE_01
OLD_REV_04_APP_SIGN_02
OLD_REV_04_APP_DATE_02
OLD_REV_05
OLD_REV_05_DATE
OLD_REV_05_REASON
OLD_REV_05_REASON_DESC
OLD_REV_05_REV_TEXT
OLD_REV_05_DRAWN_BY
OLD_REV_05_APP_SIGN_01
OLD_REV_05_APP_DATE_01
OLD_REV_05_APP_SIGN_02
OLD_REV_05_APP_DATE_02
...
CORRESPONDENT
CORRESPONDENT_NAME
ATTENTION
LETTER_DATE
CLOSE_BY
DOC_ARCH_NO
DOC_ARCH_STATUS
REFERENCE
DOC_POST_TYPE
属性のほとんどは説明不要です。すべての日付属性 (XX_DT および XX_DATE) は ISO 形式 (YYYY-MM-DD) です。別の形式が必要な場合は、マクロで変更するか、情報を取得するために使用する関数をカスタマイズする必要があります (以下をご参照ください)。
上記の属性のうち、説明が必要と思われるものは次のとおりです。
FIRSTREV_ISSUED
FIRSTREV_CHECKED_BY
FIRSTREV_CHECKED
FIRSTREV_APPROVED_BY
FIRSTREV_APPROVED
NUMBER_OF_FILES
LOCAL_FILE_NAME_XY
COPY_OF_FILE_NAME_XY
IFS_CAD_DB_ALIAS
これらの属性 (またはそれらに含まれる値) がニーズを満たしていない場合は、修正する方法がいくつかあります。
基本情報でビジネス オブジェクトを定義することにより、ドキュメントに接続されたビジネス オブジェクトの属性をドキュメントマクロ コードに含めることができます。これは、ドキュメントの接続されたオブジェクトを有効に活用できるとても便利な機能です。例えば、変更レポートドキュメントを作成し、実際の変更レポートの属性をマクロを使用してドキュメントに印刷できます。属性を取得するためのカスタムフィールドビューや、カスタム/代替データベース ビューもサポートされています。後者を使用すると、通常はオブジェクトの一部ではない追加の属性を簡単に追加できます。
この機能を使用する場合、まず各種類のビジネスオブジェクトで使用できる属性を定義する必要があります。その理由は、マクロで使用できるデータ量には限界があるためです(1つのドキュメントが数百、数千のドキュメントとつながっている可能性もあります)。すべてのマクロ属性 (メイン属性とオブジェクトの属性) の最大サイズは 32768 です。使用可能な属性は、使用されるビューに応じて選択されます。オブジェクトにカスタムフィールドビューがある場合は、それが使用されます。オプションで、属性を取得するための代替ビュー名を設定できます。
このデフォルト データを入力する方法については、 「マクロのオブジェクト属性の定義アクティビティ」をご参照ください。
以下は、接続されているすべてのオブジェクトをループし、その値にアクセスしてドキュメントで使用できるマクロ コード ブロックの例です。
'<<<<<<<<< メインブロック名:EXCEL_OBJECT_ATTR_INIT >>>>>>>> Public Sub Update_Excel() Open_Excel Write_Cell_Attr "1" , "B","A", "CONNECTED_OBJECT_TYPES" oXl.ActiveWorkbook.Save MsgBox "オブジェクト接続情報を追加しました..."End Sub '<<<<<<<<<ブロック名:EXCEL_OBJECT_ATTR_FILE_OPEN >>>>>>>> Option Explicit Dim oXl Dim sFileName Dim sPath Dim sSheetExist Dim nSheetCount Dim nCount Public Sub Open_Excel() On Error Resume Next sPath = ScriptValues.Item("LOCAL_PATH").Value sFileName = ScriptValues.Item("LOCAL_FILE_NAME").Value Set oXl = CreateObject("excel.application") If Err.Number <> 0 Then MsgBox "[excel.application] からオブジェクトを作成できません" Else oXl.Visible = True If sFileName = "" Then ' ローカル ファイル名が空の場合、これはチェックインされたドキュメントです ' 代わりに COPY_OF_FILE_NAME 値を使用します sFileName = ScriptValues.Item("COPY_OF_FILE_NAME").Value End If If sPath = "" Then ' 代わりに CHECK_OUT_PATH クライアント スクリプト値を使用します sPath = ClientScriptValues.Item("CHECK_OUT_PATH").Value End If oXl.Workbooks.Open(sPath & sFileName) 'オブジェクト接続の詳細を ObjectConnectionInfo ワークシートに追加しました ' ワークシートが存在しない場合は、ObjectConnectionInfo という新しいワークシートを作成します sSheetExist = "FALSE" nSheetCount = oXl.ActiveWorkbook.WorkSheets.Count For nCount = 1 To nSheetCount If oXl.ActiveWorkbook.Worksheets(nCount).Name = "ObjectConnectionInfo" Then sSheetExist = "TRUE" End If Next If sSheetExist = "FALSE" Then oXl.ActiveWorkbook.Worksheets.Add , oXl.ActiveWorkbook.Worksheets(oXl.ActiveWorkbook.WorkSheets.Count)) oXl.ActiveWorkbook.Worksheets(oXl.ActiveWorkbook.WorkSheets.Count)).Name = "ObjectConnectionInfo" End If oXl.ActiveWorkbook.Worksheets("ObjectConnectionInfo"). Activate End If End Sub'<<<<<<<<Block Name:EXCEL_OBJECT_ATTR_UPDATE >>>>>>>> Dim sLuNames Dim sArrayLuName Dim sTag Dim nCounter Dim sAttributes Dim sArrayAttribute Dim nRowNo Dim sLu Dim sAttribute Dim nRecCount Public Function attrValue(sVal) attrValue = ScriptValues.Item(UCase(sVal)).Value End Function Public Sub Write_Cell_Attr(row, colValue,colName, attr) On Error Resume Next nRowNo = row sLuNames = attrValue(attr) oXl.Cells(nRowNo, colName) = attr oXl.Cells(nRowNo, colValue) = sLuNames sArrayLuName = Split(sLuNames, ";", -1, 1) For Each sLu in sArrayLuName nCounter = 0 nRowNo = nRowNo + 1 sTag = sLu & ".COUNT" nCounter = attrValue(sTag) oXl.Cells(nRowNo, colName) = sTag oXl.Cells(nRowNo, colValue) = nCounter nRowNo = nRowNo + 1 sTag = sLu & ".ATTRIBUTES" sAttributes = attrValue(sTag) oXl.Cells(nRowNo, colName) = sTag oXl.Cells(nRowNo, colValue) = sAttributes sArrayAttribute = Split(sAttributes, ",", -1, 1) IF nCounter > 0 Then For nRecCount=1 to nCounter For Each sAttribute in sArrayAttribute sTag = sLu & "." & nRecCount & "." & sAttribute nRowNo = nRowNo + 1 oXl.Cells(nRowNo, colName) = sTag oXl.Cells(nRowNo, colValue) = attrValue(sTag) Next Next End If Next nRowNo = nRowNo + 1 oXl.Cells(nRowNo, colName) = "DATA_LENGTH_EXCEEDED" oXl.Cells(nRowNo, colValue) = attrValue("DATA_LENGTH_EXCEEDED") End Sub
マクロでは接続されたオブジェクトの属性を使用することはサポートされていますが、オブジェクト接続変換を介して関連付けられているだけのオブジェクトはサポートされていません。マクロ属性は、ドキュメントに直接接続されているオブジェクト (つまり、ドキュメント リビジョンの [オブジェクト] タブにリストされているオブジェクト) に対してのみ使用できます。ドキュメントに直接接続されていないオブジェクトの属性を使用する必要がある場合は、独自のカスタム属性をマクロに追加する方法について、次のセクションをご覧ください。
オプションとして、マクロで使用できる追加の属性セットを作成できます。これは、Doc_Issue_Attribute_Custom_API と呼ばれる新しいパッケージ (IFS Cloud コア製品の一部ではありません) に Get_Extra_Attributes と呼ばれるメソッドを実装して行われます。そのようなパッケージが見つかった場合、システムは指定された方法を実行しようとします。このメソッドは、4 つのドキュメントキーをパラメーターとして受け取ります。
このメソッドは、追加されたすべてのユーザー定義属性と値を含む VARCHAR2 を返す必要があります。これらの属性名は、標準属性名との衝突を避けるために、プレフィックス「C」で始まる必要があります。例については以下をご参照ください。マクロシステムで使用される属性列の合計長は、標準のものも含めて 32K であることにご注意ください。そのため、多数の属性を追加する場合や、一部の属性の値が大きい場合は、属性名を短くするようにしてください。
FUNCTION Get_Extra_Attributes ( doc_class_ IN VARCHAR2, doc_no_ IN VARCHAR2, doc_sheet_ IN VARCHAR2, doc_rev_ IN VARCHAR2 ) RETURN VARCHAR2 IS attr_list_ VARCHAR2(32000); rec_sep_ CONSTANT VARCHAR2(1) := Client_SYS.record_separator_; field_sep_ CONSTANT VARCHAR2(1) := Client_SYS.field_separator_; BEGIN attr_list_ := 'C_DOC_NO' || field_sep_ || doc_no_ || rec_sep_ || 'C_REPORTED_BY' || field_sep_ || FND_SESSION_API.Get_Fnd_User || rec_sep_ || 'C_REPORTED_DATE' || field_sep_ || to_char(sysdate) || rec_sep_; RETURN attr_list_; END;