Jump to content

Ole Ekerhovd

Members
  • Content Count

    11
  • Joined

  • Last visited

Posts posted by Ole Ekerhovd


  1. 1 hour ago, Dave Nottage said:

    That was exactly my thought when you made this comment:

    What was the error, and why was it hard to catch?

      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!:classic_laugh: 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?


  2. 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


  3. 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
        begin

          LNode := 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;


  4. 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


  5. 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;

×