2

fetchxml を使用して別のレコードから値を取得し、新しいレコードを作成しようとしています。オプションセットまたはルックアップフィールドから値を取得する以外に、すべてを機能させることができました。オプション セットのものはエラーを与えませんが、フィールドをまったく設定しないだけで、おそらく GUID を通過していないため、ルックアップは GUID が正しい形式ではないと言います。

これらの値を取得する方法を理解してくれる人はいますか?

ありがとう

編集:私のコードは以下です。オプション セットはグレーディング (ts_grading) であり、その qualityStatement Guid (ts_quality_statement_id) はフェッチから取得する必要があります。

string fetchXml = @"<fetch distinct='false' mapping='logical' output-format='xml-platform' version='1.0'>
                            <entity name='ts_self_assessment_item'>
                            <attribute name='ts_evidence_of_areas_of_improvement'/><attribute name='ts_evidence_of_strengths'/><attribute name='ts_expected_completion_date'/>
                            <attribute name='ts_grading'/><attribute name='ts_quality_statement_id'/>
                            <filter type='and'>
                            <condition attribute='ts_self_assessment_id' uitype='ts_self_assessment' operator='eq' value='" + selfAssessmentID + "'/></filter></entity></fetch>";

        // Execute Fetch xml
        EntityCollection selfAssessmentItemResult = Service.RetrieveMultiple(new FetchExpression(fetchXml));

        foreach (var selfAssessment in selfAssessmentItemResult.Entities)
        {                
            string areasOfImprovement = selfAssessment["ts_evidence_of_areas_of_improvement"].ToString();
            string strengths = selfAssessment["ts_evidence_of_strengths"].ToString();
            DateTime completionDate = Convert.ToDateTime(selfAssessment["ts_expected_completion_date"].ToString());
            string grading = selfAssessment["ts_grading"].ToString();
            Guid qualityStatement = new Guid(selfAssessment["ts_quality_statement_id"].ToString());
            Guid parentSelfAssessment = new Guid(entity.Attributes["ts_self_assessmentid"].ToString());              

        }

    }
4

1 に答える 1

7

OptionSet 属性は OptionSetValues として返され、外部キーはエンティティ参照として返されます。その ToString キャスト作業をすべて行う代わりに、Entity.GetAttributeValue を使用してみてください。

    foreach (var selfAssessment in selfAssessmentItemResult.Entities)
    {                
        string areasOfImprovement = selfAssessment.GetAttributeValue<String>("ts_evidence_of_areas_of_improvement");
        string strengths = selfAssessment.GetAttributeValue<string>("ts_evidence_of_strengths");
        DateTime completionDate = selfAssessment.GetAttributeValue<DateTime>("ts_expected_completion_date");
        var grading = selfAssessment.GetAttributeValue<OptionSetValue>("ts_grading");
        Guid qualityStatement = selfAssessment.GetAttributeValue<EntityReference>("ts_quality_statement_id").Id;

    }

また、OptionSetValue テキスト値が必要な場合は、OptionSet メタデータ サービス呼び出しを使用するか、Entity.FormattedAttributes プロパティを調べて、それを調べる必要があります。

また、事前にバインドされたオブジェクトを使用すると、このようなタイプのキャストの問題が発生しなくなります。

于 2012-07-10T12:12:01.713 に答える