Ole Ekerhovd
-
Content Count
11 -
Joined
-
Last visited
Posts posted by Ole Ekerhovd
-
-
41 minutes ago, Lars Fosdal said:I have to admit that I cringe whenever I see a boolean compared to true or false.
Why?
Please elaborate so I can learn from it 🙂
-
Solved 🙂
It was a logical error in the code, and really hard to catch too.
Regards,
Ole
-
Kryvich: aUser.Administrator is a boolean field in a record structure.
Lars: No, even if I do
aUser.Administrator:=true;
if aUser.Administrator=false then
begin .... end;the begin end always execute.
-
Delphi 10.3
I have a code snippet that is not working as I expect.
// Check if active user is different from document owner
if aUser.Username<>aDocument.Owner then
begin// If user is not an administrator
if aUser.Administrator=false then
begin
showmessage('You are not allowed to delete this document');
exit;
end;
end;Problem: the showmessage pops up even if the active user is an administrator and the boolean Administrator is True
What anm I missing here?
Ole
-
Hi Remy
Thanks for your answer, your code example works perfectly.
Your comment on "dump code" is duly noted, it was not my intention.
Regards,
Ole
-
I'm not able to parse an xml file.
I have looked into several code examples online, but I think parsing xml is quite hard to understand 🙂
Code shown is partly from Embarcadero Code Examples.
I'm interested in getting then value/text from the msg-no, sender and receiver nodes.
Any help appreciated.
Regards
Ole
This is the xml file
<inbox-query-response version="1.0">
<messages>
<message>
<self>https://xxxxxxx</self>
<message-meta-data>
<msg-no>9064430</msg-no>
<direction>IN</direction>
<received>2019-11-24T09:00:12.000+01:00</received>
<uuid>15745</uuid>
<peppol-header>
<sender>9908:123</sender>
<receiver>9908:456</receiver>
<channel>busdox-transport-as2-ver1p0</channel>
<document-type>INVOICE</document-type>
<document-id>Long text here</document-id>
<process-name>UNKNOWN</process-name>
<process-id>urn:www.cenbii.eu:profile:bii05:ver2.0</process-id>
</peppol-header>
</message-meta-data>
</message>
<message>
<self>https://xxxxxxx</self>
<message-meta-data>
<msg-no>9064565</msg-no>
<direction>IN</direction>
<received>2019-11-24T15:00:14.000+01:00</received>
<uuid>15746</uuid>
<peppol-header>
<sender>9908:321</sender>
<receiver>9908:654</receiver>
<channel>busdox-transport-as2-ver1p0</channel>
<document-type>INVOICE</document-type>
<document-id>Long text here</document-id>
<process-name>UNKNOWN</process-name>
<process-id>urn:www.cenbii.eu:profile:bii05:ver2.0</process-id>
</peppol-header>
</message-meta-data>
</message>
</messages>
</inbox-query-response>This is the code I try to use
procedure TForm2.RetrieveDocument;
const
CAttrName = 'version'; // This is found//CAttrName = 'msg-no'; This is not found
var
LDocument: IXMLDocument;
LNodeElement, LNode: IXMLNode;
LAttrValue: string;
I: Integer;begin
LDocument := TXMLDocument.Create(nil);
LDocument.LoadFromFile(SrcPath); { File should exist. }// Number of childNodes, always shows 1
showmessage(inttostr(Ldocument.ChildNodes.Count));{ Find a specific node. }
LNodeElement := LDocument.ChildNodes.FindNode('inbox-query-response');if (LNodeElement <> nil) then
begin{ Get a specific attribute. }
if (LNodeElement.HasAttribute(CAttrName)) then
begin
LAttrValue := LNodeElement.Attributes[CAttrName];
showmessage('Attribute value: ' + LAttrValue);
end;{ Traverse child nodes. }
for I := 0 to LNodeElement.ChildNodes.Count - 1 do // Gives only one iteration
beginLNode := LNodeElement.ChildNodes.Get(I);
{ Display node name. }
showmessage('Node name: ' + LNode.NodeName); // Only node, messages, is shown ones
{ Check whether the node type is Text. }
if LNode.NodeType = ntText then
begin
showmessage('This is a node of type Text. The text is: ' + LNode.Text);
end;
{ Check whether the node is text element. }
if LNode.IsTextElement then
begin
showmessage('This is a text element. The text is: ' + LNode.Text);
end;end;
end;
end;
-
Thanks Zoran, now it's working fine.
Had to set:
Accept as */*
Accept encoding as gzip,deflate
Regards
Ole
-
Hi
Delphi Tokyo.
I try to make a Rest request using Delhpi Rest Debugger (a really simple one), but it fails with an error 406 Not acceptable.
Basic authentication is used.
When I make the exact same request using Postman there is no error and I get a valid response.
Anybody with similar experiense?
Regards
Ole
-
Thanks Remy, really appreciate it.
Regards,
Ole
-
This code gives an error, "Invalid Pointer Operation".
It's the aBlob.Free that triggers the error.
What's wrong in my code? I should Free I guess?
var
aBlob : TBlobField;
aStream : TStream;try
ablob:=aQuery.fieldbyname('Memo') as tblobfield;
astream:=Tmemorystream.Create;
astream := aquery.CreateBlobStream(ablob, bmRead);
amemo.Lines.LoadFromStream(astream);
finally
ablob.Free;
astream.Free;
end;
Boolean evaluation
in Algorithms, Data Structures and Class Design
Posted
A very, very idiotic mistake. The same check was also done from another unit, I did not remember it. That routine had the exact same text in Showmessage and that routine had a bug and checked against True, not False! So it was not the error message in the routine I posted here that was shown. A lot of hours lost, but I guess this may happen when a program grow to hundreds of units?