I am trying to code a scenario when the URL does not return the correct data, it defaults to "Please call for ETA". I have it working for when the date field is null, but cannot figure out how to identify situations where there is no date result. Where should I trap this issue?
trigger OnAction()
var
APIKey: Text;
SeaRatesURL: Text;
URL1: Text;
URL2: Text;
URL3: Text;
Client: HttpClient;
Response: HttpResponseMessage;
SeaRatesJson: JsonObject;
ResponseText: Text;
SalesHeader: Record "Sales Header";
DocumentType: Enum "Sales Document Type";
ContainerNbr: Text[20];
SteamshipCode: Text[20];
ETADate: Text[20];
begin
APIKey := '123456';
URL1 := 'https://tracking.searates.com/tracking?number=';
URL2 := 'api_key=';
url3 := 'sealine=';
SalesHeader.SetRange("Document Type", DocumentType::Order);
SalesHeader.SetFilter("Container Number", '<>%1', '');
SalesHeader.SetFilter("ETA to Port", '<>%1', '');
if SalesHeader.Findset() then begin
repeat
ContainerNbr := SalesHeader."Container Number";
SteamshipCode := SalesHeader."Steamship Code";
SeaRatesURL := URL1 + ContainerNbr + '&' + URL2 + APIKey + '&' + URL3 + SteamshipCode;
Client.Get(SeaRatesURL, Response);
if Response.IsSuccessStatusCode() then begin
Response.Content.ReadAs(ResponseText);
SeaRatesJson.ReadFrom(ResponseText);
ETADate := GetETADate(SeaRatesJson.AsToken());
SalesHeader.Validate("ETA to Port", ETADate);
SalesHeader.Modify(true)
end
else begin
// error('API returned %1', Response.HttpStatusCode);
SalesHeader.Validate("ETA to Port", 'Please call for ETA');
SalesHeader.Modify(true)
end;
until SalesHeader.Next() = 0;
end
end;
}
}
}
procedure GetETADate(ContainerData: JsonToken) Date: Text
var
query: Text;
dateToken: JsonToken;
DateValue: JsonValue;
DateText: Text;
IsNull: Boolean;
begin
query := '$.data.route.pod.date';
ContainerData.SelectToken(query, dateToken);
if dateToken.IsValue() then begin
DateValue := dateToken.AsValue();
IsNull := DateValue.IsNull;
if IsNull then
Date := 'Please call for ETA'
else
Date := dateToken.AsValue().AsText();
end
end;
}