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 返回,外键作为实体引用返回。尝试使用 Entity.GetAttributeValue 而不是做所有的 ToString 转换工作:

    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 回答