sf-industry-commoncore-integration-procedure
OmniStudioのIntegration Procedureの作成・検証を110点満点のスコアリングで支援するスキルです。Data Mapperアクション・Apex Remote Action・HTTPコールアウト・条件分岐を組み合わせたサーバーサイドのプロセスオーケストレーションを構築する際に使用してください。Integration Procedureの新規作成・Data Mapperステップの追加・Remote Actionの設定・既存IP設定のレビュー時にトリガーされます。OmniScriptの構築(sf-industry-commoncore-omniscript)、Data Mapperの直接作成(sf-industry-commoncore-datamapper)、コンポーネント横断の依存関係分析(sf-industry-commoncore-omnistudio-analyze)には使用しないでください。
description の原文を見る
> OmniStudio Integration Procedure creation and validation with 110-point scoring. Use when building server-side process orchestrations that combine Data Mapper actions, Apex Remote Actions, HTTP callouts, and conditional logic. TRIGGER when: user creates Integration Procedures, adds Data Mapper steps, configures Remote Actions, or reviews existing IP configurations. DO NOT TRIGGER when: building OmniScripts (use sf-industry-commoncore-omniscript), creating Data Mappers directly (use sf-industry-commoncore-datamapper), or analyzing cross-component dependencies (use sf-industry-commoncore-omnistudio-analyze).
SKILL.md 本文
sf-industry-commoncore-integration-procedure: OmniStudio Integration Procedure の作成と検証
サーバーサイドプロセスオーケストレーションに関する深い知識を持つ、エキスパート OmniStudio Integration Procedure (IP) ビルダー。DataRaptor/Data Mapper アクション、Apex Remote Actions、HTTP callouts、条件ロジック、ネストされたプロシージャ呼び出しを組み合わせた、本番対応のマルチステップ宣言型オペレーションを作成します。
クイックリファレンス
スコアリング: 6カテゴリで 110ポイント。閾値: ✅ 90以上 (デプロイ) | ⚠️ 67~89 (レビュー) | ❌ 67未満 (ブロック - 修正必須)
コア責務
- IP 生成: 要件から適切なエレメントタイプを選択して、整形された Integration Procedures を作成し、入出力をワイヤリング
- エレメント構成: DataRaptor アクション、Remote Actions、HTTP callouts、条件ブロック、ループ、ネストされた IP 呼び出しをコヒーレントなオーケストレーションに組み立て
- 依存関係分析: 参照される DataRaptors、Apex クラス、ネストされた IPs がデプロイ前に存在かつアクティブであることを検証
- エラーハンドリング: すべてのデータ変更ステップにおいて try/catch パターン、条件付きロールバック、およびレスポンス検証を実施
重要: オーケストレーション順序
sf-industry-commoncore-omnistudio-analyze -> sf-industry-commoncore-datamapper -> sf-industry-commoncore-integration-procedure -> sf-industry-commoncore-omniscript -> sf-industry-commoncore-flexcard (あなたはここにいます: sf-industry-commoncore-integration-procedure)
IP によって参照される Data Mappers は最初に存在する必要があります。それらを呼び出す IP の前に DataRaptors/Data Mappers をビルドしてデプロイします。IP は、OmniScript または FlexCard がそれを呼び出す前にアクティブである必要があります。
主要インサイト
| インサイト | 詳細 |
|---|---|
| チェーーニング | IPs は Integration Procedure Action エレメントを介して他の IPs を呼び出します。1つのステップの出力は、レスポンスマッピングを介して次のステップの入力に供給されます。可能な限り線形にデータフローを設計してください。 |
| レスポンスマッピング | 各エレメントの出力は、レスポンス JSON のエレメント名の名前空間の下に配置されます。%elementName:keyPath% 構文を使用して、ダウンストリーム入力でアップストリーム出力を参照します。 |
| キャッシング | IPs は読み取り集約的なオーケストレーション用のプラットフォームキャッシュをサポートします。プロシージャの PropertySet で cacheType と cacheTTL を設定します。DML を実行するプロシージャのキャッシングを避けてください。 |
| バージョニング | Type/SubType ペアは IP を一意に識別します。バージョニングに SubType を使用してください (例: Type=AccountOnboarding、SubType=v2)。Type/SubType ごとに一度にアクティブできるのは1つのバージョンのみです。 |
コアネームスペース識別子: OmniStudio Core は Integration Procedures と OmniScripts の両方を OmniProcess テーブルに格納します。IsIntegrationProcedure = true または OmniProcessType = 'Integration Procedure' を使用して IPs をフィルタリングしてください。フィルタがない場合、クエリは混合結果を返します。
重要 — Data API 経由での IPs 作成: OmniProcess レコードを作成する場合、
IsIntegrationProcedure = trueを設定してレコードを Integration Procedure にします。OmniProcessTypeピックリストはこのブール値から計算され、直接設定することはできません。また、NameはOmniProcessの必須フィールドです (標準 OmniStudio ドキュメントには記載されていません)。作成にはsf api request rest --method POST --body @file.jsonを使用してください —sf data create record --valuesフラグはPropertySetConfigのような JSON テキストエリアフィールドを処理できません。
ワークフロー設計 (5フェーズパターン)
フェーズ 1: 要件収集
ビルド前に代替案を評価: 時には単一の DataRaptor、Apex サービス、または Flow の方が適切な選択です。IPs は、分岐、エラーハンドリング、および混合データソースを備えた宣言型マルチステップオーケストレーションが必要な場合に最適です。
ユーザーに以下を収集するよう依頼します:
- オーケストレーション対象のビジネスプロセスの目的
- ターゲットオブジェクトとデータソース (Salesforce オブジェクト、外部 APIs、またはその両方)
- Type/SubType ネーミング (例:
Type=OrderProcessing、SubType=Standard) - デプロイ用のターゲット org エイリアス
その後: CLI クエリを介して既存の IPs を確認し (以下の CLI コマンドを参照)、再利用可能な DataRaptors/Data Mappers を識別し、sf-industry-commoncore-omnistudio-analyze で依存コンポーネントをレビューします。
フェーズ 2: 設計とエレメント選択
| エレメントタイプ | ユースケース | PropertySet キー |
|---|---|---|
| DataRaptor Extract Action | Salesforce データを読み取る | bundle |
| DataRaptor Load Action | Salesforce データを書き込む | bundle |
| DataRaptor Transform Action | データシェーピング/マッピング | bundle |
| Remote Action | Apex クラスメソッドを呼び出す | remoteClass、remoteMethod |
| Integration Procedure Action | ネストされた IP を呼び出す | ipMethod (形式: Type_SubType) |
| HTTP Action | 外部 API callout | path、method |
| Conditional Block | 分岐ロジック | -- |
| Loop Block | コレクションを反復処理 | -- |
| Set Values | 変数/定数を割り当て | -- |
ネーミング規約: PascalCase を使用して [Type]_[SubType]。IP 内のエレメント名は、そのアクションを明確に説明する必要があります (例: GetAccountDetails、ValidateInput、CreateOrderRecord)。
データフロー: 各ステップの出力が次のステップの入力に自然に供給されるようにエレメントチェーンを設計します。暗黙的なネームスペースマージに依存するのではなく、出力を明示的にマップしてください。
フェーズ 3: 生成と検証
以下を使用して IP 定義を構築します:
- 正しい Type/SubType の割り当て
- 明示的な入出力マッピングを備えた順序付きエレメントチェーン
- すべてのデータ変更エレメントでのエラーハンドリング
- 分岐ロジック用の条件付きブロック
検証 (STRICT MODE):
- ブロック: Type/SubType が欠落、循環 IP 呼び出し、エラーハンドリングなしの DML、存在しない DataRaptors/Apex クラスへの参照
- 警告: LIMIT なしの無制限抽出、読み取り専用 IPs での欠落キャッシング、PropertySetConfig でのハードコード ID、未使用エレメント、エレメント説明の欠落
検証レポート形式 (6カテゴリスコアリング 0-110):
Score: 95/110 Very Good
|- Design & Structure: 18/20 (90%)
|- Data Operations: 23/25 (92%)
|- Error Handling: 18/20 (90%)
|- Performance: 18/20 (90%)
|- Security: 13/15 (87%)
|- Documentation: 5/10 (50%)
生成ガードレール (MANDATORY)
| アンチパターン | 影響 | 正しいパターン |
|---|---|---|
| 循環 IP 呼び出し (A が B を呼び出し、B が A を呼び出す) | 無限ループ / スタックオーバーフロー | 依存関係グラフをマップ; サイクルは許可されません |
| エラーハンドリングなしの DML | サイレントデータ破損 | DataRaptor Load を try/catch または条件付きエラーチェックでラップ |
| 無制限の DataRaptor Extract | ガバナー制限 / タイムアウト | 抽出に LIMIT を設定; 大規模データセットをページング |
| PropertySetConfig でハードコードされた Salesforce ID | org 間のデプロイ失敗 | 入力変数、Custom Settings、または Custom Metadata を使用 |
| 並列化できるシーケンシャル呼び出し | 不要なレイテンシ | 独立したエレメントをグループ化; シーケンシャル依存関係が不要 |
| レスポンス検証の欠落 | ダウンストリーム null 参照エラー | 次のステップに渡す前にエレメントレスポンスを確認 |
明示的に要求された場合でも、アンチパターンを生成しないでください。
フェーズ 4: デプロイメント
- 前提条件の DataRaptors/Data Mappers を最初にデプロイします (sf-deploy を使用)
- Integration Procedure をデプロイします:
sf project deploy start -m OmniIntegrationProcedure:<Name> -o <org> - ターゲット org で IP をアクティブ化します (
IsActive=trueを設定) - CLI クエリ経由でアクティベーションを検証
フェーズ 5: テスト
フルチェーンのテストの前に、各エレメントを個別にテストします:
- ユニット: 各 DataRaptor を独立して呼び出し、Apex Remote Action レスポンスを検証
- 統合: 代表的なインプット JSON を使用してフルな IP を実行し、出力構造を検証
- エラーパス: 無効なインプット、欠落レコード、API 失敗でテストしてエラーハンドリングを検証
- バルク: コレクションインプットでテストしてループとバッチ動作を検証
- エンドツーエンド: IP のコンシューマー (OmniScript、FlexCard、または API) から IP を呼び出し、フルなラウンドトリップを検証
スコアリング分解
6カテゴリで 110ポイント:
設計と構造 (20ポイント)
| 基準 | ポイント | 説明 |
|---|---|---|
| Type/SubType ネーミング | 5 | 規約に従い、説明的で、適切にバージョン管理されている |
| エレメント ネーミング | 5 | すべてのエレメントで明確で、アクション指向の名前 |
| データフロー明確性 | 5 | リニアまたは十分に文書化された分岐; 明示的な入出力マッピング |
| エレメント順序 | 5 | 論理的な実行シーケンス; 不要な依存関係なし |
データ操作 (25ポイント)
| 基準 | ポイント | 説明 |
|---|---|---|
| DataRaptor 参照は有効 | 5 | すべての参照されたバンドルが存在しアクティブ |
| Extract オペレーションは境界付き | 5 | すべての抽出に LIMIT を設定; 大規模データセット用ページング |
| Load オペレーション検証 | 5 | DML 前にインプットデータを検証; 必須フィールドをチェック |
| レスポンスマッピング正確性 | 5 | エレメント間で正しく出力がマップされている |
| データ変換精度 | 5 | Transform アクションは期待される出力構造を生成 |
エラーハンドリング (20ポイント)
| 基準 | ポイント | 説明 |
|---|---|---|
| DML エラーハンドリング | 8 | すべての DataRaptor Load アクションはエラーハンドリングを備えている |
| HTTP エラーハンドリング | 4 | すべての HTTP アクションはステータスコードをチェックし失敗を処理 |
| Remote Action エラーハンドリング | 4 | Apex 例外をキャッチして表示 |
| ロールバック戦略 | 4 | マルチステップ DML は条件付きロールバック또は補償アクションを備えている |
パフォーマンス (20ポイント)
| 基準 | ポイント | 説明 |
|---|---|---|
| 無制限クエリなし | 5 | すべての抽出に合理的な LIMIT 値を設定 |
| キャッシング適用 | 5 | 読み取り専用プロシージャは必要に応じてプラットフォームキャッシュを使用 |
| 並列実行 | 5 | 独立したエレメントは不要にシリアル化されない |
| 冗長呼び出しなし | 5 | 同じデータがエレメント全体で複数回フェッチされない |
セキュリティ (15ポイント)
| 基準 | ポイント | 説明 |
|---|---|---|
| ハードコード ID なし | 5 | ID は入力変数またはメタデータから渡される |
| ハードコード認証情報なし | 5 | API キー/トークンは Named Credentials または Custom Settings を使用 |
| インプット検証 | 5 | ユーザーが提供するインプットはクエリまたは DML で使用する前にサニタイズ |
ドキュメント (10ポイント)
| 基準 | ポイント | 説明 |
|---|---|---|
| プロシージャ説明 | 3 | 目的とビジネスコンテキストの明確な説明 |
| エレメント説明 | 4 | 各エレメントにはそのロールを説明する説明がある |
| インプット/アウトプット ドキュメント | 3 | 期待されるインプット JSON と出力 JSON 構造を文書化 |
CLI コマンド
# アクティブな Integration Procedures をクエリ
sf data query -q "SELECT Id,Name,Type,SubType,IsActive FROM OmniProcess WHERE IsActive=true AND IsIntegrationProcedure=true" -o <org>
# すべての Integration Procedures をクエリ (非アクティブを含む)
sf data query -q "SELECT Id,Name,Type,SubType,IsActive,LastModifiedDate FROM OmniProcess WHERE IsIntegrationProcedure=true ORDER BY LastModifiedDate DESC" -o <org>
# Integration Procedure を取得
sf project retrieve start -m OmniIntegrationProcedure:<Name> -o <org>
# Integration Procedure をデプロイ
sf project deploy start -m OmniIntegrationProcedure:<Name> -o <org>
# ドライラン検証でデプロイ
sf project deploy start -m OmniIntegrationProcedure:<Name> -o <org> --dry-run
コアネームスペース注記: IsIntegrationProcedure=true フィルタは REQUIRED です (または同等の OmniProcessType='Integration Procedure')。OmniScript および Integration Procedure レコードは OmniProcess sObject を共有しています。このフィルタがない場合、クエリは両方のタイプを返して誤解を招く結果を生成します。
クロススキル統合
| スキルから | sf-industry-commoncore-integration-procedure へ | いつ |
|---|---|---|
| sf-industry-commoncore-omnistudio-analyze | -> sf-industry-commoncore-integration-procedure | 「IP をビルドする前に依存関係を分析」 |
| sf-industry-commoncore-datamapper | -> sf-industry-commoncore-integration-procedure | 「DataRaptor/Data Mapper が準備できたら、それを IP にワイヤリング」 |
| sf-apex | -> sf-industry-commoncore-integration-procedure | 「Apex Remote Action クラスをデプロイしたら、IP で構成」 |
| sf-industry-commoncore-integration-procedure から | スキルへ | いつ |
|---|---|---|
| sf-industry-commoncore-integration-procedure | -> sf-deploy | 「IP をターゲット org にデプロイ」 |
| sf-industry-commoncore-integration-procedure | -> sf-industry-commoncore-omniscript | 「IP がアクティブであれば、それを呼び出す OmniScript をビルド」 |
| sf-industry-commoncore-integration-procedure | -> sf-industry-commoncore-flexcard | 「IP がアクティブであれば、データソースを呼び出す FlexCard をビルド」 |
| sf-industry-commoncore-integration-procedure | -> sf-industry-commoncore-omnistudio-analyze | 「デプロイ前に IP 依存関係グラフを検証」 |
エッジケース
| シナリオ | ソリューション |
|---|---|
| IP がそれ自体を呼び出す (直接再帰) | 設計時にブロック; 循環依存チェックは必須 |
| IP が元の IP を呼び出す IP を呼び出す (間接再帰) | フルコールグラフをマップ; sf-industry-commoncore-omnistudio-analyze がサイクルを検出 |
| DataRaptor がまだデプロイされていない | 最初に DataRaptors をデプロイ; 欠落参照で IP デプロイメントが失敗 |
| 外部 API タイムアウト | HTTP Action エレメントでタイムアウト値を設定; リトライロジックまたはグレースフルデグラデーション実装 |
| Loop Block への大規模コレクションインプット | バッチサイズを設定; 実際のデータボリュームでテストして CPU タイムアウトを回避 |
| 既存 IP での Type/SubType 衝突 | デプロイ前に既存 IPs をクエリ; SubType バージョニング衝突を回避 |
| 混合ネームスペース (Vlocity vs Core) | org ネームスペースを確認; パッケージ間でエレメントプロパティ名が異なる |
デバッグ: IP が実行されない -> IsActive フラグ + Type/SubType マッチを確認 | エレメントスキップ -> 条件ブロックロジック + インプットデータ形状を検証 | タイムアウト -> DataRaptor クエリスコープ + HTTP タイムアウト設定を確認 | デプロイメント失敗 -> すべての参照コンポーネントがデプロイされアクティブであることを検証
注記
依存関係 (オプション): sf-deploy、sf-industry-commoncore-datamapper、sf-industry-commoncore-omnistudio-analyze | API: 66.0 | モード: Strict (警告はブロック) | スコアリング: スコアが 67 未満の場合デプロイをブロック | 詳細ガイダンスについては references/best-practices.md および references/element-types.md を参照してください。
プログラムで IPs を作成: REST API を使用してください (sf api request rest --method POST --body @file.json)。必須フィールド: Name、Type、SubType、Language、VersionNumber、IsIntegrationProcedure=true。その後、各アクションステップ用に OmniProcessElement 子レコードを作成してください (JSON PropertySetConfig 用の REST API も使用)。すべてのエレメントが作成されたら、IsActive=true を設定してアクティベーションします。
ライセンス
MIT License. Copyright (c) 2026 David Ryan (weytani)
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- jaganpro
- リポジトリ
- jaganpro/sf-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/jaganpro/sf-skills / ライセンス: MIT
関連スキル
hugging-face-trackio
Trackioを使用してMLトレーニング実験を追跡・可視化できます。トレーニング中のメトリクスログ記録(Python API)、トレーニング診断のアラート発火、ログされたメトリクスの取得・分析(CLI)が必要な場合に活用してください。リアルタイムダッシュボード表示、Webhookを使用したアラート、HF Space同期、自動化向けのJSON出力に対応しています。
btc-bottom-model
ビットコインのサイクルタイミングモデルで、加重スコアリングシステムを搭載しています。日次パルス(4指標、32ポイント)とウィークリー構造(9指標、68ポイント)の2カテゴリーにわたる13の指標を追跡し、0~100のマーケットヒートスコアを算出します。ETFフロー、ファンディングレート、ロング/ショート比率、恐怖・貪欲指数、LTH-MVRV、NUPL、SOPR(LTH+STH)、LTH供給率、移動平均倍率(365日MA、200週MA)、週次RSI、出来高トレンドに対応します。市場サイクル全体を通じて買いと売りの両方の推奨を提供します。ビットコインの底値拾い、BTCサイクルポジション、買い時・売り時、オンチェーン指標、MVRV、NUPL、SOPR、LTH動向、ETFの流出入、ファンディングレート、恐怖指数、ビットコインが過熱状態か、マイナーコスト、暗号資産市場のセンチメント、BTCのポジションサイジング、「今ビットコインを買うべきか」「BTCが天井をつけているか」「オンチェーン指標は何を示しているか」といった質問の際にこのスキルを活用します。
protein_solubility_optimization
タンパク質の溶解性最適化 - タンパク質の溶解性を最適化します。タンパク質の特性を計算し、溶解性と親水性を予測し、有効な変異を提案します。タンパク質配列の特性計算、タンパク質機能の予測、親水性計算、ゼロショット配列予測を含むタンパク質エンジニアリング業務に使用できます。3つのSCPサーバーから4つのツールを統合しています。
research-lookup
Parallel Chat APIまたはPerplexity sonar-pro-searchを使用して、最新の研究情報を検索できます。学術論文の検索にも対応しています。クエリは自動的に最適なバックエンドにルーティングされるため、論文の検索、研究データの収集、科学情報の検証に活用できます。
tree-formatting
ggtree(R)またはiTOL(ウェブ)を使用して、系統樹の可視化とフォーマットを行います。系統樹を図として描画する際、ツリーレイアウトの選択、分類学に基づく枝やラベルの色付け、クレードの折りたたみ、サポート値の表示、またはツリーへのオーバーレイ追加が必要な場合に使用してください。系統推定(protein-phylogenyスキルを使用)やドメイン注釈(今後の独立したスキル)には使用しないでください。
querying-indonesian-gov-data
インドネシア政府の50以上のAPIとデータソースに接続できます。BPJPH(ハラール認証)、BOM(食品安全)、OJK(金融適正性)、BPS(統計)、BMKG(気象・地震)、インドネシア中央銀行(為替レート)、IDX(株式)、CKAN公開データポータル、pasal.id(第三者法MCP)に対応しています。インドネシア政府データを活用したアプリ開発、.go.idウェブサイトのスクレイピング、ハラール認証の確認、企業の法的適正性の検証、金融機関ステータスの照会、またはインドネシアMCPサーバーへの接続時に使用できます。CSRF処理、CKAN API使用方法、IP制限回避など、すぐに実行可能なPythonパターンを含んでいます。