Microsoft Excel ドキュメントからの要件のインポート
この例では、Microsoft® Excel® ドキュメントから要件をインポートする方法を示します。要件の特定のプロパティとカスタム属性に Excel スプレッドシートから列をマッピングできます。要件のインポート後に実行されるコールバックを使用して、インポートされた要件に要件タイプやインデックスなどの特定の値を割り当てることもできます。
この例では、ExampleRequirements
Excel ファイルを使用します。ファイルを開くには次のように入力します。
winopen("ExampleRequirements.xlsx")
PostImportFcn
コールバック スクリプトの作成
スクリプトを作成して PostImportFcn
コールバックとして登録することで、インポートされた要件をインポートが終了した直後に Requirements Toolbox™ で処理できます。この例では、slreqExamplePostImportXls
スクリプトを PostImportFcn
コールバックとして使用します。次のように入力してスクリプトを表示します。
edit("slreqExamplePostImportXls.m")
Excel からインポートした要件のタイプは、既定では Functional
になります。スクリプトの最初の for
ループで、インポートされた各要件を反復処理して要件タイプを割り当てます。このループでは、Microsoft Excel ファイルでの元の要件タイプをチェックし、インポートされた要件のタイプをそのタイプに合う Requirements Toolbox の組み込みの要件タイプに設定します。Excel の要件に要件タイプがない場合、スクリプトはその要件のタイプを Functional
のままにします。
idToRef = containers.Map('KeyType', 'char', 'ValueType', 'Any'); topRefs = slreq.getCurrentObject; reqSet = topRefs(1).parent; refs = reqSet.find('type', 'Reference'); for i = 1:numel(refs) ref = refs(i); switch ref.getAttribute('orig_Type') case 'Heading' ref.Type = 'Container'; case 'Note' ref.Type = 'Informational'; otherwise % leave AS IS end % build the Map of IDs for the next step idToRef(ref.Id) = ref; end
2 つ目の for
ループで、インポートされた各要件を反復処理し、Excel で定義されている要件の階層を適用します。
sortedIds = sort(keys(idToRef)); for i = 2:numel(sortedIds) thisId = sortedIds{i}; % Find the parent ID by truncating this ID at the last '.' parentId = ''; dotCharIdx = find(thisId == '.'); if ~isempty(dotCharIdx) parentId = thisId(1:dotCharIdx(end)-1); end if ~isempty(parentId) ref = idToRef(thisId); parentObj = idToRef(parentId); ref.overrideLocked('parent', parentObj.SID); end end
Excel ファイルでは、要件の階層の異なるレベルを示すために、要件 ID でピリオド (.) が使用されています。スクリプトでは、ピリオドを使用して階層レベルを識別し、階層を作成し直します。
インポート オプションの構成
インポート時に使用するオプションを含む構造体を作成します。要件が含まれている Excel ファイルの列と行の範囲をリストします。
importOptions = struct("columns",[2 7],"rows",[3 56]);
要件のデータを Excel の要件から Requirements Toolbox にマッピングするための情報を追加します。2 列目、4 列目、および 5 列目を slreq.Reference
の組み込みのプロパティである ID
、Summary
、および Description
にマッピングします。
importOptions.idColumn = 2; importOptions.summaryColumn = 4; importOptions.descriptionColumn = 5;
3 列目、6 列目、および 7 列目については、slreq.Reference
のプロパティに直接マッピングできません。それらの列を orig_Type
、Remark
、および Status
という名前のカスタム属性にマッピングします。Excel での要件タイプは、slreq.Reference
オブジェクトの Type
プロパティではなく、カスタム属性にマッピングされることに注意してください。
importOptions.attributes = {'orig_Type','Remark','Status'}; importOptions.attributeColumn = [3 6 7];
slreqExamplePostImportXls
スクリプトを PostImportFcn
コールバックとして登録します。
importOptions.postImportFcn = "slreqExamplePostImportXls";
要件のインポート
ExampleRequirements
Excel ファイルの Requirements
シートから ImportedFromExcel
という名前の新しい要件セットに、slreq.import
を使用して要件をインポートします。オプションの構造体から指定される追加のインポート オプションを使用して、プレーン テキストの参照要件として要件をインポートします。インポートされた参照要件の数、要件セットのファイル パス、および要件セットのハンドルを返します。
[count,reqSetFilePath,reqSet] = slreq.import("ExampleRequirements.xlsx", ... ReqSet="ImportedFromExcel",AsReference=true,RichText=false, ... subDoc="Requirements",options=importOptions);
インポートされた要件セットを保存し、[要件エディター] で内容を確認します。
save(reqSet); explore(reqSet);
slreqExamplePostImportXls
スクリプトがインポート ノードに対する PostImportFcn
コールバック関数として登録されています。このコールバックは、要件セットを更新する場合にも実行されます。
インポートされた要件のタイプの確認
インポートされた要件を調べて、要件タイプを Excel の要件と比較します。コールバック関数により、インポートされた要件に Requirements Toolbox の組み込みのタイプを使用してタイプが割り当てられています。たとえば、要件 1 は、Excel ファイルでのタイプは Heading
で、Container
のタイプでインポートされています。
req1 = slreq.find(Type="Reference",Index="1"); originalType1 = getAttribute(req1,"orig_Type")
originalType1 = 'Heading'
importedType1 = getAttribute(req1,"Type")
importedType1 = 'Container'
要件 1.1 は、Excel でのタイプは Note
で、Informational
のタイプでインポートされています。
req2 = slreq.find(Type="Reference",Index="1.1"); originalType2 = getAttribute(req2,"orig_Type")
originalType2 = 'Note'
importedType2 = getAttribute(req2,"Type")
importedType2 = 'Informational'
要件 2.1.1 は、Excel ではタイプが示されておらず、Functional
のタイプでインポートされています。
req3 = slreq.find(Type="Reference",Index="2.1.1"); originalType3 = getAttribute(req3,"orig_Type")
originalType3 = 0×0 empty char array
importedType3 = getAttribute(req3,"Type")
importedType3 = 'Functional'
インポートされた要件の階層の確認
インポートされた要件の階層を調べて、階層を Excel ファイルと比較します。コールバック関数により、インポートされた要件の階層は Excel ファイルでの階層に基づいて作成されています。たとえば、要件 2.1.1 には、Excel では 6 つの子要件があります。
インポートされた要件 2.1.1 の子要件を取得します。
childReqs = children(req3)
childReqs=1×6 object
1×6 Reference array with properties:
Id
CustomId
Artifact
ArtifactId
Domain
UpdatedOn
CreatedOn
CreatedBy
ModifiedBy
IsLocked
Summary
Description
Rationale
Keywords
Type
IndexEnabled
IndexNumber
SID
FileRevision
ModifiedOn
Dirty
Comments
Index
Excel では、2.1.1 の最初の子要件のタイトルは Cruise
です。配列の最初の子要件に対する概要を取得します。
childSummary = childReqs(1).Summary
childSummary = 'Cruise'
[要件エディター] でも、インポートされた要件の階層が Excel での階層と一致することを確認できます。