Autor
|
Thema: Get value of parameter from file (1352 mal gelesen)
|
sina123 Mitglied
Beiträge: 47 Registriert: 26.11.2018
|
erstellt am: 04. Feb. 2019 10:41 <-- editieren / zitieren --> Unities abgeben:
Hello I have some files with some parameters;i want to check if a specific parameter exists in the Parameter list of each file. I tried: public string GetFileNameFromParam(KnowledgewareTypeLib.Parameters Params) { string fileName = ""; //foreach (KnowledgewareTypeLib.Parameter p in Params) //{ // if (p.get_Name().Split('\\').Last() == selectedRule) // { // sfileName = p.ValueAsString(); // } //} KnowledgewareTypeLib.Parameter p = null; p = (KnowledgewareTypeLib.Parameter)Params.GetItem(selectedRule); sfileName = p.ValueAsString(); return sfileName; } But i get the name of the parameter wherein i want the value of it. What do i miss? The commented lines gets me the correct answer but i want to be faster than looping. thanks for any help! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Feb. 2019 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für sina123
Hi I think you have to use a loop. AFAIK GetItem needs the complete name (PartNumber/Properties/Parametername). What kind of Parameters are these? If they are UserRefProperties, use a loop over these and not the complete parameter collection. Maybe you can decrease the number of parameters in the collection with Sublist . Regards, Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sina123 Mitglied
Beiträge: 47 Registriert: 26.11.2018
|
erstellt am: 04. Feb. 2019 10:56 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Feb. 2019 10:58 <-- editieren / zitieren --> Unities abgeben: Nur für sina123
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Feb. 2019 11:00 <-- editieren / zitieren --> Unities abgeben: Nur für sina123
|
sina123 Mitglied
Beiträge: 47 Registriert: 26.11.2018
|
erstellt am: 04. Feb. 2019 11:01 <-- editieren / zitieren --> Unities abgeben:
public void CreateFileNameParameter(KnowledgewareTypeLib.Parameters Params, string sfileName) { try { KnowledgewareTypeLib.StrParam Param = null; Param = Params.CreateString(selectedRule, sfileName); } catch (Exception ex) { logs.Info(ex.ToString()); } } Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sina123 Mitglied
Beiträge: 47 Registriert: 26.11.2018
|
erstellt am: 04. Feb. 2019 11:05 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Feb. 2019 11:08 <-- editieren / zitieren --> Unities abgeben: Nur für sina123
The property UserAccessMode shows if the parameter was generated by the user. Decreasing the collection by using the right ParameterSet or Sublist the looping could by much faster (and maybe also GetItem working). There are several "position" a parameter can be created in the tree. So where have you created it? ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sina123 Mitglied
Beiträge: 47 Registriert: 26.11.2018
|
erstellt am: 04. Feb. 2019 11:14 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Feb. 2019 11:18 <-- editieren / zitieren --> Unities abgeben: Nur für sina123
Think about, where the parameter should be located. According to your picture you should get the parameter like these: MyproductDocument.Product.Parameters.RootParameterSet.DirectParameters.Item("myParameterName")------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sina123 Mitglied
Beiträge: 47 Registriert: 26.11.2018
|
erstellt am: 04. Feb. 2019 12:32 <-- editieren / zitieren --> Unities abgeben:
|
sina123 Mitglied
Beiträge: 47 Registriert: 26.11.2018
|
erstellt am: 04. Feb. 2019 15:29 <-- editieren / zitieren --> Unities abgeben:
Hello..i have more question related to parameters shall i just post here or a different post..the question is regarding a list of parameters from parameters in the file that was previously added. I tried with: public void RemoveParameters(KnowledgewareTypeLib.Parameters Params) { foreach (string removeParam in removeParams) { foreach (KnowledgewareTypeLib.Parameter p in Params) { if (p.UserAccessMode == 2) { if (p.get_Name().Split('\\').Last() == selectedRuleFileParam) { Params.Remove(p); //I get exception at this line- "System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has //been returned from a call to a COM component." } } } } } //where KnowledgewareTypeLib.Parameters Params = prodRoot.Parameters.RootParameterSet.DirectParameters;
tried with with GetItem:
if(Params.GetItem(removeParam)!= null) { Params.Remove(removeParam); }
[Diese Nachricht wurde von sina123 am 04. Feb. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 04. Feb. 2019 15:36 <-- editieren / zitieren --> Unities abgeben: Nur für sina123
Hi According to the V5Automation.chm you should use The index or the name of the parameter to remove from the collection of parameters. ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
sina123 Mitglied
Beiträge: 47 Registriert: 26.11.2018
|
erstellt am: 04. Feb. 2019 15:39 <-- editieren / zitieren --> Unities abgeben:
Yes, luckily i too got it this way public void RemoveParameters(KnowledgewareTypeLib.Parameters Params) { for(int i=1;i<=Params.Count;i++) { if (Params.Item(i).UserAccessMode == 2) { Params.Remove(i); } } } Thanks for the quick reply Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |