2016-06-30 16 views
0

Ich versuche, Setup-Daten aus einer Tabelle zu verwenden, um Felder dynamisch/dynamisch zu formatieren. Ich weiß, dass ich Feldnamen und Sichtbarkeit basierend auf der PXUIFieldAttribute-Klasse ändern kann, aber die Genauigkeit oder String-Länge zu ändern, ist offensichtlich etwas kniffliger. Von der Forschung, die ich getan habe, habe ich den folgenden Beispielcode gefunden, der scheint, als sollte es funktionieren - aber ich erhalte den Fehler:Stringlänge oder Dezimalgenauigkeit des Feldattributs dynamisch ändern

"Darf das Objekt vom Typ 'PX.Data.PXUIFieldAttribute' nicht umwandeln Typ ‚PX.Data.PXDBDecimalAttribute‘.

ich sehe nicht, warum dies auftritt ...

protected virtual void xTACOpenSourceDetail_RowSelected(PXCache sender, PXRowSelectedEventArgs e) 
    { 
     var osd = (PXCache)sender; 

     foreach (PXDBDecimalAttribute attribute in this.Caches<xTACOpenSourceDetail>().GetAttributes("Number1")) 
     { 

      PXDBDecimalAttribute someAttribute = attribute as PXDBDecimalAttribute; 
      if (someAttribute != null) 
      { 
       someAttribute.DBProperties._precision = 4; 
      } 
     } 

    } 

Antwort

0

ich habe gerade versucht, den Code unten in dem Kundenauftrag Bildschirm und es scheint zu arbeiten!

 var props = typeof(SOOrder).GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(PXDecimalAttribute))); 
     foreach (System.Reflection.PropertyInfo item in props) 
     { 
      PXDecimalAttribute.SetPrecision(this.Base.Caches[typeof(SOOrder)], item.Name, 1); 
     } 

Möglicherweise müssen Sie dies ändern, damit es zu Ihrem DAC passt.

+0

Abgesehen von der Notwendigkeit, PXDecimalAttribute zu PXDBDecimalAttribute zu ändern - das hat den Trick - danke! – pmfith

+0

ja, entschuldigung. Ich habe es nur versucht. – Hybridzz