<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic setting parameter value causes a transaction exception in Revit API Forum</title>
    <link>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8352858#M46798</link>
    <description>&lt;P&gt;I am using revit 2016 and c#.&lt;/P&gt;&lt;P&gt;When my code runs to this part(&lt;SPAN&gt;existedParameter.Set(targetParamValue);&lt;/SPAN&gt;), it throws an exception "attempts to modify the model out of a transaction."The method is nested in a transaction group.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;private void SetFamilyInstParamsForSelectedElement(Document familyDoc, Element element, List&amp;lt;Dictionary&amp;lt;string, string&amp;gt;&amp;gt; selectedInstAttrList)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if (selectedInstAttrList == null || selectedInstAttrList.Count == 0)&amp;nbsp; &amp;nbsp;return;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;foreach (Dictionary&amp;lt;string, string&amp;gt; dict in selectedInstAttrList)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; string targetParam = dict["attrName"];&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; string targetParamType = dict["attrValueType"];&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; string targetParamValue = dict["valuelist"];&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (element.LookupParameter("CI_" + targetParam) != null)&lt;BR /&gt;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; using (Transaction trans = new Transaction(familyDoc, "set param value for CI_" + targetParam))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; trans.Start();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Parameter existedParameter = element.LookupParameter("CI_" + targetParam);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!string.IsNullOrEmpty(targetParamValue) &amp;amp;&amp;amp; targetParamValue != "--")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (targetParamType == "0")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; existedParameter.Set(targetParamValue);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if (targetParamType == "1")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;existedParameter.Set(Convert.ToDouble(targetParamValue));&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; trans.Commit();&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Document familyDoc = document.EditFamily(fmiInst.Symbol.Family);&lt;BR /&gt;List&amp;lt;Dictionary&amp;lt;string, string&amp;gt;&amp;gt; selectedInstAttrList = form1.selectedInstAttrList;&lt;/P&gt;&lt;P&gt;string wuliaoleibie_code = fixedParams["wuliaoleibieBianhao"];&lt;BR /&gt;string wuliaoleibie_name = fixedParams["SmallType"];&lt;BR /&gt;string wuliaoleibie_ID = fixedParams["wuliaoleibieID"];&lt;BR /&gt;using (TransactionGroup transGroup = new TransactionGroup(document, "create parameters for the selected single element"))&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp;transGroup.Start();&lt;BR /&gt;&amp;nbsp; SetFamilySymbolStringParamForSingleElement(familyDoc, eleSymbol, "物料类别编号", wuliaoleibie_code);&lt;BR /&gt;&amp;nbsp; SetFamilySymbolStringParamForSingleElement(familyDoc, eleSymbol, "物料类别名称", wuliaoleibie_name);&lt;BR /&gt;&amp;nbsp; SetFamilySymbolStringParamForSingleElement(familyDoc, eleSymbol, "物料类别ID", wuliaoleibie_ID);&lt;BR /&gt;&amp;nbsp; SetFamilyInstParamsForSelectedElement(familyDoc, targetElement, selectedInstAttrList);&lt;BR /&gt;&amp;nbsp; transGroup.Assimilate();&lt;/P&gt;&lt;P&gt;}&lt;BR /&gt;familyDoc.LoadFamily(document, new projFamLoadOption());&lt;/P&gt;</description>
    <pubDate>Tue, 23 Oct 2018 11:58:37 GMT</pubDate>
    <dc:creator>Anonymous</dc:creator>
    <dc:date>2018-10-23T11:58:37Z</dc:date>
    <item>
      <title>setting parameter value causes a transaction exception</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8352858#M46798</link>
      <description>&lt;P&gt;I am using revit 2016 and c#.&lt;/P&gt;&lt;P&gt;When my code runs to this part(&lt;SPAN&gt;existedParameter.Set(targetParamValue);&lt;/SPAN&gt;), it throws an exception "attempts to modify the model out of a transaction."The method is nested in a transaction group.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;private void SetFamilyInstParamsForSelectedElement(Document familyDoc, Element element, List&amp;lt;Dictionary&amp;lt;string, string&amp;gt;&amp;gt; selectedInstAttrList)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; if (selectedInstAttrList == null || selectedInstAttrList.Count == 0)&amp;nbsp; &amp;nbsp;return;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;foreach (Dictionary&amp;lt;string, string&amp;gt; dict in selectedInstAttrList)&lt;BR /&gt;&amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; string targetParam = dict["attrName"];&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; string targetParamType = dict["attrValueType"];&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; string targetParamValue = dict["valuelist"];&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (element.LookupParameter("CI_" + targetParam) != null)&lt;BR /&gt;&amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; using (Transaction trans = new Transaction(familyDoc, "set param value for CI_" + targetParam))&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; trans.Start();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Parameter existedParameter = element.LookupParameter("CI_" + targetParam);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (!string.IsNullOrEmpty(targetParamValue) &amp;amp;&amp;amp; targetParamValue != "--")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (targetParamType == "0")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; existedParameter.Set(targetParamValue);&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if (targetParamType == "1")&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;existedParameter.Set(Convert.ToDouble(targetParamValue));&lt;BR /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; trans.Commit();&lt;BR /&gt;&amp;nbsp;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Document familyDoc = document.EditFamily(fmiInst.Symbol.Family);&lt;BR /&gt;List&amp;lt;Dictionary&amp;lt;string, string&amp;gt;&amp;gt; selectedInstAttrList = form1.selectedInstAttrList;&lt;/P&gt;&lt;P&gt;string wuliaoleibie_code = fixedParams["wuliaoleibieBianhao"];&lt;BR /&gt;string wuliaoleibie_name = fixedParams["SmallType"];&lt;BR /&gt;string wuliaoleibie_ID = fixedParams["wuliaoleibieID"];&lt;BR /&gt;using (TransactionGroup transGroup = new TransactionGroup(document, "create parameters for the selected single element"))&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; &amp;nbsp;transGroup.Start();&lt;BR /&gt;&amp;nbsp; SetFamilySymbolStringParamForSingleElement(familyDoc, eleSymbol, "物料类别编号", wuliaoleibie_code);&lt;BR /&gt;&amp;nbsp; SetFamilySymbolStringParamForSingleElement(familyDoc, eleSymbol, "物料类别名称", wuliaoleibie_name);&lt;BR /&gt;&amp;nbsp; SetFamilySymbolStringParamForSingleElement(familyDoc, eleSymbol, "物料类别ID", wuliaoleibie_ID);&lt;BR /&gt;&amp;nbsp; SetFamilyInstParamsForSelectedElement(familyDoc, targetElement, selectedInstAttrList);&lt;BR /&gt;&amp;nbsp; transGroup.Assimilate();&lt;/P&gt;&lt;P&gt;}&lt;BR /&gt;familyDoc.LoadFamily(document, new projFamLoadOption());&lt;/P&gt;</description>
      <pubDate>Tue, 23 Oct 2018 11:58:37 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8352858#M46798</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2018-10-23T11:58:37Z</dc:date>
    </item>
    <item>
      <title>Re: setting parameter value causes a transaction exception</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8352972#M46799</link>
      <description>&lt;P&gt;&lt;SPAN&gt;Is targetElement in the&amp;nbsp;familyDoc? - i.e.&amp;nbsp; is familyDoc the same as targetElement.Document?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Your transaction is to edit the familyDoc and the changes you make are supposed to be on the elements that belong to that document. And I am not sure where that targetElement comes from.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Oct 2018 12:39:25 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8352972#M46799</guid>
      <dc:creator>BardiaJahan</dc:creator>
      <dc:date>2018-10-23T12:39:25Z</dc:date>
    </item>
    <item>
      <title>Re: setting parameter value causes a transaction exception</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8353007#M46800</link>
      <description>&lt;P&gt;The element is selected by the user:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Reference ref1 = uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element, "请选择单个元素");&lt;/P&gt;&lt;P&gt;Element targetElement = document.GetElement(ref1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I try to upload my whole code file but I can not successfully submit my post unless&amp;nbsp; I do not upload my file.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried to use FamilyManager.Set() method but I need to retrieve the parameter from my element based on the unique parameter name which cannot be converted to FamilyParameter that is required by the method. So I have to use parameter.set() method.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Oct 2018 12:50:21 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8353007#M46800</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2018-10-23T12:50:21Z</dc:date>
    </item>
    <item>
      <title>Re: setting parameter value causes a transaction exception</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8353028#M46801</link>
      <description>&lt;P&gt;Instead of passing the document to your method why don't you retrieve it from the element - i.e. change it to this:&lt;/P&gt;&lt;PRE&gt;private void SetFamilyInstParamsForSelectedElement(Element element, List&amp;lt;Dictionary&amp;lt;string, string&amp;gt;&amp;gt; selectedInstAttrList)
        {
            Document document = element.Document;
            if (selectedInstAttrList == null || selectedInstAttrList.Count == 0) return;

            foreach (Dictionary&amp;lt;string, string&amp;gt; dict in selectedInstAttrList)
            {
                string targetParam = dict["attrName"];
                string targetParamType = dict["attrValueType"];
                string targetParamValue = dict["valuelist"];

                if (element.LookupParameter("CI_" + targetParam) != null)
                {
                    using (Transaction trans = new Transaction(document, "set param value for CI_" + targetParam))
                    {
                        trans.Start();

                        Parameter existedParameter = element.LookupParameter("CI_" + targetParam);

                        if (!string.IsNullOrEmpty(targetParamValue) &amp;amp;&amp;amp; targetParamValue != "--")
                        {
                            if (targetParamType == "0")
                            {
                                existedParameter.Set(targetParamValue);

                            }
                            else if (targetParamType == "1")
                            {
                                existedParameter.Set(Convert.ToDouble(targetParamValue));
                            }
                        }

                        trans.Commit();
                    }
                }
            }
        }&lt;/PRE&gt;</description>
      <pubDate>Tue, 23 Oct 2018 12:56:57 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8353028#M46801</guid>
      <dc:creator>BardiaJahan</dc:creator>
      <dc:date>2018-10-23T12:56:57Z</dc:date>
    </item>
    <item>
      <title>Re: setting parameter value causes a transaction exception</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8353123#M46802</link>
      <description>&lt;P&gt;Your answer seems right. Before I posted this question,&amp;nbsp; I was struggling with document regenerating. However, I am going to sleep and I will try your solution tomorrow. If it worked,&amp;nbsp; I will&amp;nbsp; put an end to this post. Thanks for your reply!&lt;/P&gt;</description>
      <pubDate>Tue, 23 Oct 2018 13:31:15 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8353123#M46802</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2018-10-23T13:31:15Z</dc:date>
    </item>
    <item>
      <title>Re: setting parameter value causes a transaction exception</title>
      <link>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8353241#M46803</link>
      <description>&lt;P&gt;And I have understand what you mean.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Document document = commandData.Application.ActiveUIDocument.Document;&lt;/P&gt;&lt;P&gt;UIDocument uidoc = commandData.Application.ActiveUIDocument;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Reference ref1 = uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element, "select an element");&lt;BR /&gt;Element targetElement = document.GetElement(ref1);&lt;/P&gt;&lt;P&gt;FamilyInstance fmiInst = targetElement as FamilyInstance;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Document familyDoc = document.EditFamily(fmiInst.Symbol.Family);&lt;/P&gt;&lt;P&gt;And the familyDoc is put into the transaction.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 23 Oct 2018 13:57:05 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/revit-api-forum/setting-parameter-value-causes-a-transaction-exception/m-p/8353241#M46803</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2018-10-23T13:57:05Z</dc:date>
    </item>
  </channel>
</rss>

