Apex 保存プロセスのカスタマイズ
このセクションでは、APEX コールを使用した保存プロセスをカスタマイズするための各種のワークフロープロセスについて説明します。
- 管理パッケージの SObject 項目の値を変更します。
1// Get the TPM_Promotion instance 2TPM_Promotion promotion = (TPM_Promotion) args.get('promotion'); 3 4// Update the Promotion__c SObject field 5Promotion__c myPromo = (Promotion__c) promotion.getPromotion().getRecord(); 6myPromo.Slogan_Language_1__c = 'My New Slogan'; 7 8// Update the First Tactic__c Group Text 9Tactic__c myTactic = (Tactic__c) promotion.getTactics()[0].getRecord(); 10myTactic.Group_Text__c = 'My New group text'; - 管理パッケージの SObject レコードを削除します。
1// Get the TPM_Promotion instance 2TPM_Promotion promotion = (TPM_Promotion) args.get('promotion'); 3 4// Delete the first Tactic__c SObject 5TPM_Promotion.Record tacticRecordWrapper = promotion.getTactics()[0]; 6if (!tacticRecordWrapper.isDeleted()) { // We can also check if the record is new with isNew() 7 tacticRecordWrapper.setIsDeleted(true); 8} - カスタム SObject をプロモーション保存に追加します。プロモーションの SObject データベースのコミット時に保存される別の SObject を追加できます。
1// Get the TPM_Promotion instance 2TPM_Promotion promotion = (TPM_Promotion) args.get('Promotion'); 3 4// Append a new SObject to be saved 5MyCustomSObject__c mySObject = new MyCustomSObject__c(); 6TPM_Promotion.Record myRecordWrapper = promotion.append(mySObject);TPM_Promotion クラスでは、トランザクションのすべての操作をカプセル化している間に、プロモーション関連のすべての SObject が all or none の方式でコミットされます。フックは複数の TPM プロセスの複数の場所からコールされます。したがって、不完全なデータや無効なデータがコミットされないようにするため、提供されたメソッドを使用し��、カスタムレコードやリレーションを処理することがベストプラクティスとして推奨されます。カスタム sobject レコードに対する SObject 書き込み順序は、append コールの順序によって決まります。
- 保存するカスタム SObject をリレーションと共に追加します。
1// Get the TPM_Promotion instance 2TPM_Promotion promotion = (TPM_Promotion) args.get('Promotion'); 3 4// Append a new SObject to be saved 5MyCustomSObject__c mySObject = new MyCustomSObject__c(); 6TPM_Promotion.Record myRecordWrapper = promotion.append(mySObject); 7 8// Add relationship to the Promotion__c record 9promotion.addRelationship( 10 myRecordWrapper, 11 MyCustomSObject__c.Promotion__c, 12 promotion.getPromotion() 13); 14 15// Append an additional Child SObject 16MyChildSObject__c myChildSObject = new MyChildSObject__c(); 17TPM_Promotion.Record myChildRecordWrapper = promotion.append(myChildSObject); 18 19// Relate the child object to our custom object 20promotion.addRelationship( 21 myChildRecordWrapper, 22 MyChildSObject__c.MyCustomSObject__c, 23 myRecordWrapper 24); - TPM UI でカスタムデータを保存します。プロモーションデータと共に保存するために送信されたカスタムデータを保存します。コール可能なクラスでは、プロモーション状態の一部として設定されたカスタム状態にアクセスできます。
1// Get the TPM_Promotion instance 2TPM_Promotion promotion = (TPM_Promotion) args.get('promotion'); 3 4// Get the custom data serialized data 5String payloadString = (String) args.get('customState'); 6 7// Deserialize it to be able to access the data 8MyCustomStructure payload = (MyCustomStructure) JSON.deserialize(payloadString, MyCustomStructure.class); 9 10// Add the retrieved records to be saved on the promotion transaction 11if (payload.myRecords != null) { 12 for (MyRecord__c mr: payload.myRecords) { 13 // Add the sobject record to the list of objects to insert or update 14 TPM_Promotion.Record = wrapper = promotion.append(mr); 15 // Relate it to the promotion (if needed) 16 promotion.addRelationship( 17 wrapper, 18 MyRecord__c.Promotion__c, 19 promotion.getPromotion() 20 ); 21 } 22}