Upgrade Dimensionen (Funktion GetDeltaDimSetID)

5. März 2013 16:09

Hallo,
ich habe mir eine (besser gesagt zwei) Funktion in CU 408 erstellt, die die Dimensionen eines bereits bestehenden Dimensionssatzes ändert und die "neue" Dimensionssatz ID zurück gibt. Ich konnte es noch nicht testen, aber ich habe mir das Vorgehen von der Funktion EditDimensionSet abgeschaut. Die erste Funktion erzeugt oder ändert einen Dim-Wert eines bereits bestehenden Sets indem sie einen temporären Dimensionssatz erstellt. die zweite Funktion fügt beide temporären Dimensionssets zusammen und erzeugft daraus einen neuen Dimensionssatz. Das jedoch im Silencemodus ohne aufrufen einer Page, wie in EditDimensionSet.

Code:
InsertOrModifyDimensionValueToDimensionSet(p_DimensionSetID : Integer;p_DimensionCode : Code[20];p_DimensionValue : Code[20]) : Integer
l_TempDimensionSetEntry.INIT;
l_TempDimensionSetEntry.VALIDATE("Dimension Code",p_DimensionCode);
l_TempDimensionSetEntry.VALIDATE("Dimension Value Code",p_DimensionValue);
l_TempDimensionSetEntry.INSERT(TRUE);
EXIT(EditDimensionSetSilence(p_DimensionSetID,l_TempDimensionSetEntry));

Code:
EditDimensionSetSilence(p_DimSetID : Integer;VAR v_DimensionSetEntry : Record "Dimension Set Entry") : Integer

l_NewDimSetID := p_DimSetID;
GetDimensionSet(l_TempDimensionSetEntry,p_DimSetID);
IF v_DimensionSetEntry.FINDSET THEN
  REPEAT
    IF l_TempDimensionSetEntry.GET(p_DimSetID,v_DimensionSetEntry."Dimension Code") THEN BEGIN
      IF v_DimensionSetEntry."Dimension Value Code" = '' THEN
        l_TempDimensionSetEntry.DELETE
      ELSE
        IF v_DimensionSetEntry."Dimension Value Code" <> l_TempDimensionSetEntry."Dimension Value Code" THEN BEGIN
          l_TempDimensionSetEntry.VALIDATE("Dimension Value Code",v_DimensionSetEntry."Dimension Value Code");
          l_TempDimensionSetEntry.MODIFY;
        END;
    END ELSE BEGIN
      l_TempDimensionSetEntry.INIT;
      l_TempDimensionSetEntry := v_DimensionSetEntry;
      l_TempDimensionSetEntry.INSERT;
    END;
  UNTIL v_DimensionSetEntry.NEXT = 0;
l_NewDimSetID := GetDimensionSetID(l_TempDimensionSetEntry);
EXIT(l_NewDimSetID);


Gibt es diesen Workflow vielleicht schon als Standardfunktion und ich hab das nur übersehen? Was macht die Funktion GetDeltaDimSetID? Die macht das doch eigentlich auch oder? Ich war mir da nicht sicher.

Grüße Rene

Re: [Gelöst] Upgrade Dimensionen in DimensionSetID

6. März 2013 14:45

Rene.Kern hat geschrieben:Hallo,
ich habe mir eine (besser gesagt zwei) Funktion in CU 408 erstellt, die die Dimensionen eines bereits bestehenden Dimensionssatzes ändert und die "neue" Dimensionssatz ID zurück gibt. Ich konnte es noch nicht testen, aber ich habe mir das Vorgehen von der Funktion EditDimensionSet abgeschaut. Die erste Funktion erzeugt oder ändert einen Dim-Wert eines bereits bestehenden Sets indem sie einen temporären Dimensionssatz erstellt. die zweite Funktion fügt beide temporären Dimensionssets zusammen und erzeugft daraus einen neuen Dimensionssatz. Das jedoch im Silencemodus ohne aufrufen einer Page, wie in EditDimensionSet.

Code:
InsertOrModifyDimensionValueToDimensionSet(p_DimensionSetID : Integer;p_DimensionCode : Code[20];p_DimensionValue : Code[20]) : Integer
l_TempDimensionSetEntry.INIT;
l_TempDimensionSetEntry.VALIDATE("Dimension Code",p_DimensionCode);
l_TempDimensionSetEntry.VALIDATE("Dimension Value Code",p_DimensionValue);
l_TempDimensionSetEntry.INSERT(TRUE);
EXIT(EditDimensionSetSilence(p_DimensionSetID,l_TempDimensionSetEntry));

Code:
EditDimensionSetSilence(p_DimSetID : Integer;VAR v_DimensionSetEntry : Record "Dimension Set Entry") : Integer

l_NewDimSetID := p_DimSetID;
GetDimensionSet(l_TempDimensionSetEntry,p_DimSetID);
IF v_DimensionSetEntry.FINDSET THEN
  REPEAT
    IF l_TempDimensionSetEntry.GET(p_DimSetID,v_DimensionSetEntry."Dimension Code") THEN BEGIN
      IF v_DimensionSetEntry."Dimension Value Code" = '' THEN
        l_TempDimensionSetEntry.DELETE
      ELSE
        IF v_DimensionSetEntry."Dimension Value Code" <> l_TempDimensionSetEntry."Dimension Value Code" THEN BEGIN
          l_TempDimensionSetEntry.VALIDATE("Dimension Value Code",v_DimensionSetEntry."Dimension Value Code");
          l_TempDimensionSetEntry.MODIFY;
        END;
    END ELSE BEGIN
      l_TempDimensionSetEntry.INIT;
      l_TempDimensionSetEntry := v_DimensionSetEntry;
      l_TempDimensionSetEntry.INSERT;
    END;
  UNTIL v_DimensionSetEntry.NEXT = 0;
l_NewDimSetID := GetDimensionSetID(l_TempDimensionSetEntry);
EXIT(l_NewDimSetID);


Gibt es diesen Workflow vielleicht schon als Standardfunktion und ich hab das nur übersehen? Was macht die Funktion GetDeltaDimSetID? Die macht das doch eigentlich auch oder? Ich war mir da nicht sicher.

Grüße Rene


Bitte einen eigenen Beitrag dafür aufmachen. Insb. da dieser schon als gelöst markiert wurde.

Re: Upgrade Dimensionen (Funktion GetDeltaDimSetID)

6. März 2013 18:16

Thema geteilt, Ursprungsthema hier.