「TableをX++で作るには?」の編集履歴(バックアップ)一覧はこちら

TableをX++で作るには?」(2012/06/20 (水) 14:54:32) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

TableをX++で作るには、AOTの操作関数を使います。 クラスを作成し(例:TableManagerClass)、以下のようなメソッドを定義します。 > static void CreateTable(str _tableName) > { > // テーブルを作成する > TreeNode treeNode; > str tablePath = #TablesPath + "\\"; > ; > > if(TreeNode::findNode(tablePath + _tableName)) // テーブルが既に存在した場合 > { > info(tablePath + _tableName + " は既に存在しています"); > } > else > { > // 追加先のノードを取得 > treeNode = TreeNode::findNode(tablePath); > > // テーブルを追加 > treeNode.AOTadd(_tableName); > > // AOTと同期させる > SqlDataDictionary::synchronize(); > > info(tablePath + _tableName + " を追加しました"); > } > } Jobを作成し、以下のように書きます。 > static void JobCreateTable(Args _args) > { > // テーブルを作成する > ; > > // テーブル名 > tableName = "Table_Test"; > > // テーブルを生成する > TableManagerClass::CreateTable(tableName); > } Jobを実行するとテーブルが作成されます。 (既にテーブルが存在する場合には、メッセージのみ表示しています) ---- フィールドを作成する場合は、以下のようなメソッドを定義します。 > static void CreateField(str _tableName, str _fieldName, str _fieldType, > str _stringSize, str _label, str _mandatory, str _extendedDataType = "") > { > // フィールドを作成する > > AOTTableFieldList fieldList; > TreeNode fieldNode; > str propertyStr; > str fieldPath = #TablesPath + "\\" + _tableName + "\\Fields"; > ; > > fieldList = infolog.findNode(fieldPath); > > // セキュリティチェック > if (!hasSecuritykeyAccess(securitykeynum(SysDevelopment), AccessType::View)) > { > return; > } > > // フィールドを追加 > if (fieldList.AOTFindChild(_fieldName)) > { > info(fieldPath + _fieldName + " は既に存在しています"); > } > else > { > if(_fieldType == "Enum") > { > fieldList.addEnum(_fieldName); > } > else if(_fieldType == "Integer") > { > fieldList.addInteger(_fieldName); > } > else if(_fieldType == "String") > { > fieldList.addString(_fieldName); > > fieldNode = fieldList.AOTFindChild(_fieldName); > if(_extendedDataType == "") > { > fieldNode.AOTsetProperty("StringSize", _stringSize); > } > } > else if(_fieldType == "Date") > { > fieldList.addDate(_fieldName); > } > else if(_fieldType == "Real") > { > fieldList.addReal(_fieldName); > } > else > { > info("_fieldTypeが正しくありません!"); > return; > } > //info("nodeType: " + int2str(fieldList.AOTFindChild(_fieldName).AOTgetNodeType())); > > // プロパティ変更 > fieldNode = fieldList.AOTFindChild(_fieldName); > fieldNode.AOTsetProperty("Label", _label); > fieldNode.AOTsetProperty("Mandatory", _mandatory); > > propertyStr = fieldNode.AOTgetProperties(false, false); > propertyStr = setProperty(propertyStr, "ExtendedDataType", _extendedDataType); > fieldNode.AOTsetProperties(propertyStr); > > // ノード保存 > fieldNode.AOTsave(); > > info(fieldPath + _fieldName + "(" + _fieldType > + ", StringSize=" + _stringSize + ", Label=" + _label > + ", Mandatory=" + _mandatory + ", ExtendedDataType=" + _extendedDataType > + ") を追加しました"); > } > > // AOTと同期させる > SqlDataDictionary::synchronize(); > } 上記は特定の型とプロパティにしか、対応していませんが、 処理を同様に増やすことで対応が出来ます。 また、この場合、Jobでは以下のように書きます。 (以下は、テーブルもあわせて作成する例) > static void JobCreateTable(Args _args) > { > // テーブルを作成する > str tableName; > str fieldName; > str fieldType; > ; > > // テーブル/フィールドのパスと名前 > tableName = "Table_Test"; > fieldName = "StringTest"; > fieldType = "String"; > > // テーブルを生成する > TableManagerClass::CreateTable(tableName); > > // フィールドを生成する > TableManagerClass::CreateField(tableName, fieldName, fieldType, "60", "テストフィールド", "Yes", "testDataType"); > } ※参考:http://dynamicsuser.net/forums/p/36641/189646.aspx  
TableをX++で作るには、AOTの操作関数を使います。 クラスを作成し(例:TableManagerClass)、以下のようなメソッドを定義します。 > static void CreateTable(str _tableName) > { > // テーブルを作成する > TreeNode treeNode; > str tablePath = #TablesPath + "\\"; > ; > > if(TreeNode::findNode(tablePath + _tableName)) // テーブルが既に存在した場合 > { > info(tablePath + _tableName + " は既に存在しています"); > } > else > { > // 追加先のノードを取得 > treeNode = TreeNode::findNode(tablePath); > > // テーブルを追加 > treeNode.AOTadd(_tableName); > > // AOTと同期させる > SqlDataDictionary::synchronize(); > > info(tablePath + _tableName + " を追加しました"); > } > } Jobを作成し、以下のように書きます。 > static void JobCreateTable(Args _args) > { > // テーブルを作成する > ; > > // テーブル名 > tableName = "Table_Test"; > > // テーブルを生成する > TableManagerClass::CreateTable(tableName); > } Jobを実行するとテーブルが作成されます。 (既にテーブルが存在する場合には、メッセージのみ表示しています) ---- フィールドを作成する場合は、以下のようなメソッドを定義します。 > static void CreateField(str _tableName, str _fieldName, str _fieldType, > str _stringSize, str _label, str _mandatory, str _extendedDataType = "") > { > // フィールドを作成する > > AOTTableFieldList fieldList; > TreeNode fieldNode; > str propertyStr; > str fieldPath = #TablesPath + "\\" + _tableName + "\\Fields"; > ; > > fieldList = infolog.findNode(fieldPath); > > // セキュリティチェック > if (!hasSecuritykeyAccess(securitykeynum(SysDevelopment), AccessType::View)) > { > return; > } > > // フィールドを追加 > if (fieldList.AOTFindChild(_fieldName)) > { > info(fieldPath + _fieldName + " は既に存在しています"); > } > else > { > if(_fieldType == "Enum") > { > fieldList.addEnum(_fieldName); > } > else if(_fieldType == "Integer") > { > fieldList.addInteger(_fieldName); > } > else if(_fieldType == "String") > { > fieldList.addString(_fieldName); > > fieldNode = fieldList.AOTFindChild(_fieldName); > if(_extendedDataType == "") > { > fieldNode.AOTsetProperty("StringSize", _stringSize); > } > } > else if(_fieldType == "Date") > { > fieldList.addDate(_fieldName); > } > else if(_fieldType == "Real") > { > fieldList.addReal(_fieldName); > } > else > { > info("_fieldTypeが正しくありません!"); > return; > } > //info("nodeType: " + int2str(fieldList.AOTFindChild(_fieldName).AOTgetNodeType())); > > // プロパティ変更 > fieldNode = fieldList.AOTFindChild(_fieldName); > fieldNode.AOTsetProperty("Label", _label); > fieldNode.AOTsetProperty("Mandatory", _mandatory); > > propertyStr = fieldNode.AOTgetProperties(false, false); > propertyStr = setProperty(propertyStr, "ExtendedDataType", _extendedDataType); > fieldNode.AOTsetProperties(propertyStr); > > // ノード保存 > fieldNode.AOTsave(); > > info(fieldPath + _fieldName + "(" + _fieldType > + ", StringSize=" + _stringSize + ", Label=" + _label > + ", Mandatory=" + _mandatory + ", ExtendedDataType=" + _extendedDataType > + ") を追加しました"); > } > > // AOTと同期させる > SqlDataDictionary::synchronize(); > } 上記は特定の型とプロパティにしか、対応していませんが、 処理を同様に増やすことで対応が出来ます。 また、この場合、Jobでは以下のように書きます。 (以下は、テーブルもあわせて作成する例) > static void JobCreateTable(Args _args) > { > // テーブルを作成する > str tableName; > str fieldName; > str fieldType; > ; > > // テーブル/フィールドのパスと名前 > tableName = "Table_Test"; > fieldName = "StringTest"; > fieldType = "String"; > > // テーブルを生成する > TableManagerClass::CreateTable(tableName); > > // フィールドを生成する > TableManagerClass::CreateField(tableName, fieldName, fieldType, "60", "テストフィールド", "Yes", "testDataType"); > } ※参考:http://dynamicsuser.net/forums/p/36641/189646.aspx ※参考:http://www.cetix.de/DynamicsNews/Thread7863-Cannot_set_the_ExtendedDataType_property_of_table_field.aspx  

表示オプション

横に並べて表示:
変化行の前後のみ表示: