2013-04-03 8 views
8

Jak uzyskać na początku bieżącą nazwę MLM bez nazwy użytkownika? Specjalne słowo kluczowe THIS_MLM_NAME zwraca nazwę MLM w formacie USERNAME-302364198::MLM_NAME_HERE, ale chcę po prostu nazwę MLM sama.Uzyskaj obecnie działającą nazwę MLM w Arden

Próbowałem za pomocą SUBSTRING:

SUBSTRING 200 CHARACTERS 
STARTING AT ((FIND "::" IN THIS_MLM_NAME) + 2) 
FROM THIS_MLM_NAME; 

Ale to właśnie zwraca null. Co ja robię źle?

Odpowiedz

4

Problem polega na tym, że THIS_MLM_NAME nie jest w rzeczywistości ciągiem Arden. Jeśli przetestujesz THIS_MLM_NAME IS STRING, otrzymasz false. Aby to naprawić, przekonwertować go na sznurku z THIS_MLM_NAME AS STRING:

ThisMLMName := SUBSTRING 200 CHARACTERS 
    STARTING AT ((FIND "::" IN STRING (THIS_MLM_NAME AS String)) + 2) 
    FROM (THIS_MLM_NAME AS String); 

Ponieważ nie ma debugger w realizacji Sunrise intensywnej terapii z dnia Arden, napisałem następujące MLM pomóc pokazać informacje na temat zmiennych (nazwa modułu MOD_VARIABLE_INFO lub zmianę kod dopasować rzeczywistą nazwę):

// data slot 
(Variable, Padding) := ARGUMENT; 
Result := ""; 
IF NOT EXIST Padding THEN 
    Padding := ""; 
ENDIF; 
CR := (13 FORMATTED WITH "%c") || Padding; 
Delimiter := ""; 
MOD_VARIABLE_INFO := MLM 'MOD_VARIABLE_INFO'; 
IF Variable IS LIST THEN 
    Result := Result || "List(" || (COUNT Variable) || ") [" || CR || " "; 
    FOR Item IN Variable DO 
     Result := Result || Delimiter; 
     TempResult := CALL MOD_VARIABLE_INFO WITH Item, Padding || " "; 
     Result := Result || TempResult; 
     Delimiter := "," || CR || " "; 
    ENDDO; 
    Result := Result || CR || "]"; 
ELSEIF Variable IS STRING THEN 
    Result := Result || "String"; 
ELSEIF Variable IS NUMBER THEN 
    Result := Result || "Number"; 
ELSEIF Variable IS BOOLEAN THEN 
    Result := Result || "Boolean"; 
ELSEIF Variable IS NET_OBJECT THEN 
    Result := Result || ".Net Object"; 
ELSEIF Variable IS NULL THEN 
    Result := Result || "Null"; 
ELSEIF Variable IS OBJECT THEN 
    Result := Result || "Object {" || CR || " "; 
    FOR Attr IN (EXTRACT ATTRIBUTE NAMES Variable) DO 
     Result := Result || Delimiter || Attr || ": "; 
     Item := ATTRIBUTE Attr FROM Variable; 
     TempResult := CALL MOD_VARIABLE_INFO WITH Item, Padding || " "; 
     Result := Result || TempResult; 
     Delimiter := "," || CR || " "; 
    ENDDO; 
    Result := Result || CR || "}"; 
ELSE 
    Result := Result || "Unknown (" || Variable || ")"; 
ENDIF; 
// logic slot 
CONCLUDE True; 
// action slot 
RETURN Result; 

Chociaż MLM zwraca „Nieznany” dla THIS_MLM_NAME, to przynajmniej pokazuje, że nie ma żadnego z rodzimych typów danych Arden ani nie jest to typ danych .NET.

W Sunrise MLM Editor można zobaczyć, co się dzieje w leżącym poniżej Lispie, sprawdzając składnię MLM, następnie klikając zakładkę "Składnia Sprawdź MLM", wybierając "Definicja funkcji", a następnie patrząc na kod w prawy dolny panel. Wyszukaj THIS_MLM_NAME, a znajdziesz (SETQ THIS_MLM_NAME 'USERNAME-302364198::MLM_NAME). Z tego widać, że zmienna została ustawiona na zwykły cytowany/nieoceniony wyrażenie lisp, a nie ciąg, który wyglądałby tak: (SETQ THIS_MLM_NAME "USERNAME-302364198::MLM_NAME").