Post

3 followers Follow
0
Avatar

Check if relationship field is empty

Hi all!

Is there any way I can check if a relationship field is empty?

Veronica

Please sign in to leave a comment.

11 comments

0
Avatar

Hi Veronica,

you want to check it in a calculation field which is in the same item as the relationship field? Let's say the relationship field in App A links to App B which has a title field named "Title". In each item the title field always has a value. Then you can do in the calculation field in App A:

@All of Title.length

This shows the number 0 if there is no B-item related, or 2 if there are 2 related..

Rainer

Rainer Grabowski 0 votes
Comment actions Permalink
0
Avatar

Having the same question!

Want to check if it's not empty.

I've already tried

if (@All of Nummer != null){
}

and

if (@All of Nummer.length > 0){
}

But neither of them is working.

 

Sinan Sağlam 0 votes
Comment actions Permalink
0
Avatar

Hi Sinan,

the check if an array (@all of ...) is empty:  @all of nummer != "" (not null)
If you use an IF you need an ELSE, e.g.:

var arr = @all of nummer
arr != "" ? "not empty" : "empty" 

or

if(arr == ""){
"not empty"
}else{
"empty"
};

Rainer

Rainer Grabowski 0 votes
Comment actions Permalink
0
Avatar

Hi Rainer,

yes I just didn't copy the else to my post here.

I've tried:

if (@All of Nummer == ""){
nameinkalender = @All of Nummer.join(" / ") + ": ";
}
else{}

But it didn't work either.

 

 

What I basically want is that if there are related items, their "Nummer"s should be written to "nameinkalender", followed by a ":"

And if there aren't any related items, nothing should be written to "nameinkalender". (also no ":")

Sinan Sağlam 0 votes
Comment actions Permalink
0
Avatar

You simply have to declare a var nameinkalender:

var arr = @all of nummer;
var nameinkalender = "";
if (arr != ""){
nameinkalender = arr.join(" / ") + ": ";
}else{
nameinkalender
};
nameinkalender

I prefer the shorthand version:

var arr = @all of nummer;
arr != "" ? arr.join(" / ") + ": " : "" 
Rainer Grabowski 0 votes
Comment actions Permalink
0
Avatar

Yesyes, I did that, too - sorry for not being clear enough.

Actually the calculation is way bigger - the @All of Nummer should just be the prefix of a longer string built of more information:

 

var nameinkalender = "";
var kalenderinfo = "";

if (@All of Nummer == ""){
    nameinkalender = @All of Nummer.join(" / ") + ": ";
}
else{}

nameinkalender = nameinkalender + @Vorname + " " + @Nachname + " (" + moment(@Datum des Auftrags).format('DD.MM.YYYY') + ")";


if (@Info (wird im Kalender angezeigt) != null){
    kalenderinfo = @Info (wird im Kalender angezeigt);
}
else {}

if (@Status == "STORNO"){
    @Status + ": " + nameinkalender + " " + kalenderinfo;
}
else {
    nameinkalender + " " + kalenderinfo;
}

Sinan Sağlam 0 votes
Comment actions Permalink
0
Avatar

Oder so: 

var arr = @all of nummer; 
var vn = @Vorname;
var nn = @Nachname;
var datAuf = @Datum des Auftrags;
var info = @Info (wird im Kalender angezeigt);
var status = @Status;

var nameinkalender = (arr != "" ? arr.join(" / ") + ": " : "") + vn + " " + nn + " (" + moment(datAuf).format('DD.MM.YYYY') + ") ";
var kalenderinfo = info || "";
var status = status == "STORNO" ? status  + ": " : "";
status + nameinkalender + kalenderinfo ;

Schöne Grüße aus München :)
Rainer

 

Rainer Grabowski 0 votes
Comment actions Permalink
0
Avatar

Ohh super, so geht's! Viiiielen lieben Dank! :)

 

Was habe ich denn falsch gemacht? Sollte ich lieber immer erst die Podio Fields in eine richtige Variable schreiben?

Und meinst du, du könntest mir das ganze nochmal in der ausführlichen if/else Notation schreiben, falls du mal kurz Zeit hast? Kann mit der verkürzten leider gar nichts anfangen :(


Kann nämlich kaum JS und es wäre gut, wenn ich den Code in einem Monat immer noch verstehe:)

 

Liebe Grüße aus Berlin!

Sinan Sağlam 0 votes
Comment actions Permalink
0
Avatar

Sollte ich lieber immer erst die Podio Fields in eine richtige Variable schreiben?

Ja, vor allem wenn sich Variablen wiederholen (macht a) den Code lesbarer, b) muss man dann nicht immer den Token in der Dropedown-Liste suchen und c) kann man Code dann einfacher kopieren und Code-Teile verschieben).

var status = status == "STORNO" ? status  + ": " : "";

Zu lesen als: 
status == "STORNO"  -> IF
? -> THEN
status -> nehem den Werrt der Variablen status (in diesem Fall könntest du auch "STORNO" hin schreiben)
: -> ELSE
"" -> Wert für ELSE 

Dein langer Code sollte funktionieren, wenn du diesen eine Fehler raus nimmst:
falsch: if (@All of Nummer == ""){
muss sein:
richtig: if (@All of Nummer != ""){
Und trage bei else einen Wert ein:

var nameinkalender = "";
var kalenderinfo = "";

if (@All of Nummer != ""){
    nameinkalender = @All of Nummer.join(" / ") + ": ";
}
else{
nameinkalender;
};

nameinkalender = nameinkalender + @Vorname + " " + @Nachname + " (" + moment(@Datum des Auftrags).format('DD.MM.YYYY') + ")";


if (@Info (wird im Kalender angezeigt) != null){
    kalenderinfo = @Info (wird im Kalender angezeigt);
}
else {
kalenderinfo;
};

if (@Status == "STORNO"){
    @Status + ": " + nameinkalender + " " + kalenderinfo;
}
else {
    nameinkalender + " " + kalenderinfo;
};

Grüße nach Berlin (wo ich die ganze übernächste Woche sein werde).

Rainer

 

Rainer Grabowski 0 votes
Comment actions Permalink
0
Avatar

Okay, danke!

Komischerweise funktioniert das heute gar nicht mehr - habe eigentlich nichts an der App geändert.
Es zeigt einfach Vorname Nachname (Datum) an, aber Status, Info und das array Nummer werden ignoriert und nie angezeigt.

 

Kann es sein, dass Podio solche komplexen Calculation Felder irgendwann ignoriert?

Hatte das schonmal, und da war es sogar deutlich weniger:

if (@All of Gutscheincode.indexOf(@Gutscheincode) > -1) {
"true";
} else if (@Gutscheincode == null) {
"-";
} else {
"<strong>### FALSE ### UNGÜLTIGER GUTSCHEIN ###</strong>";
}

Das ging eigentlich mal, aber ein paar Tage später ging es dann einfach nicht mehr.

Sinan Sağlam 0 votes
Comment actions Permalink
0
Avatar

Hi Sinan,

das Calculation-Feld ist nicht komplex. Ich habe Calculations, mit fast 1000 Zeilen, vielfach verschachtelten IF und Loops und ... die 10.000e Einträge durchsuchen.

Wenn Status, Info und Nummer nicht angezeigt werden, ist das Ergebnis der jeweiligen IFs == falsch und es wird der Wert von ELSE durchgereicht == ""  in den ersten beiden IFs und nameimkalender im 3. IF.  Da aber die Variable nameimkalender Werte enthält, die nicht IF-bedingt sind (Vorname, Nachname, Datum) werden diese 3 Werte auf jeden Fall immer anzeigt. 

Prüf die Calculation doch mal in einem Eintrag, in dem Status == "STORNO" und @Info (wird im Kalender angezeigt) != null und auch im verbundenen Eintrag sicher ein Wert im Feld Nummer eingetragen ist. 

Rainer Grabowski 0 votes
Comment actions Permalink