Forum Replies Created

  • Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi Dimitri,

     

    the approach you propose to populate a table in your SQL data base is considered to be potentially unsafe and abusable, since the user that is executing the statement needs to have File privileges granted to them on the server. The official MySQL documentation itself warns to grant such privileges and execute said LOAD DATA statement, cf. https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html.

     

    I would recommend you to implement your own import function in a Simplifier application using Javascript functionality. Here are the basic steps you need to take in your app workflow:

     

    1. Use a sap.ui.unified.FileUploader widget to get access to your local .txt file

    2. Read in the file as a text with the help of a FileReader

    3. Pass the text as input to the client-side business object ITIZ_CSV and its function CSV_to_JSON which is part of our Standard Content

    4. Use a repeatable statement SQL connector call which is invoked from a server-side business object function to pass the whole JSON array and insert it into your data base table

     

    Kind regards,

     

    Armin

     

    • This reply was modified 2 years ago by Armin.
    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi Christian,

     

    I meant to say that I am not familiar with the jQuery UI library and thus do not know about any potential dependencies for that library or if it can be used in the browser only. These are usually the prerequisites / restrictions when searching for a JS library to add to an application built with Simplifier. I’ve downloaded the zip file of the library in the meantime and it seems jQuery UI can be used as an extension of your app perfectly fine. Let’s get to your questions now:

     

    – Yes, you can leave the structure of the zip file unchanged or you can rearrange them the way it works best for you. In the addScript function then you include the path to the (minified) .js file as the first argument. Adding a new JS library to Simplifier usually only needs to be done once and from then on every developer on your Simplifier instance is able to easily add it as a dependency to their apps by the click of a button. Once correctly configured and uploaded, the structure of the zip file is not important anymore.

    – Technically speaking, jQuery core is integrated into the OpenUI5 framework that every application created with Simplifier uses. As for example the Simplifier UI / frontend is also a UI5 application, jQuery can therefore be accessed from there as well. You would see potential conflicts as soon as you’ve deployed an application that has the newly added jQuery UI set as dependency and run the app. From what I can see in the source code file of jQuery UI, it simply extends the jQuery object by adding another reference under the key ui, i.e. any function added by jQuery UI should be accessible via “jQuery.ui” or “$.ui”

     

    If you need further guidance, I would also recommend you to take a look at the libraries that are already included in our standard content package and how the addScript / addStyle functions look like for them. I will also get back to you in your support ticket as soon as it’s there in our system.

     

    Regards,

    Armin

     

     

    • This reply was modified 2 years ago by Armin.
    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi Christian,

     

    no that is not correct, the functions listed under the link you provided are additional functions added by OpenUI5 which are not standard for jQuery. You should definitely be able to execute any regular jQuery function in your applications built with Simplifier. However, I’m afraid you won’t be able to use the draggable function as it’s part of the jQuery UI library, not the original jQuery library. If you want to include jQuery UI in your application, you can still try to add it as a dependency following these instructions: https://community.simplifier.io/doc/current-release/extend/integrate-external-libraries/ (please also take a look at the subpages)

     

    Regards,

    Armin

    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi Christian,

     

    in every OpenUI5 application created with Simplifier you should be able to use jQuery by invoking a function from the library on the self-named object, i.e. “jQuery”. Alternatively, you can also access the library via the shortcut “$”. Yes indeed, the jQuery library is built into OpenUI5 and thus loaded on app start for every application. If you need to get a jQuery object of any widget included in your application, you can first get that widget via ID and then invoke the “$” function on it. Here’s the API reference for this function: https://sapui5.hana.ondemand.com/#/api/sap.ui.core.Element%23methods/$

     

    Hope this helps!

     

    Regards,

    Armin

    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi all,

     

    if I may add to Christopher’s reply, we also explain this sort of ‘type binding’ in further detail in one of our articles over at the Knowledge Base section of the Community based on a currency input. Please take a look here: https://community.simplifier.io/knowledge/currency-formatting-with-ui5/

     

    Thank you all a lot for contributing to this topic and our forums in general, this is much appreciated!

     

    Regards,

    Armin

    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi Christian,

     

    if you are using the data type “Date” for input parameters, Simplifier expects a date time string following the ISO 8601 standard (as defined here) with the time zone UTC. To achieve this in combination with the DatePicker widget that you are using in your application, you need to set the value of the property “valueFormat” “to YYYY-MM-ddTHH:mm:ss.sssZ”.

    However, as your time zone might not be UTC (see the code example below for +1 hours offset for German winter time), you still need to make sure that your date time string is set to 0 UTC offset. In order to do this, you can either instantiate a new Javascript Date object and pass the value from the DatePicker as input, then invoke the function toISOString on that object (like so: new Date(“2022-01-28T00:00:00.000+0100”).toISOString()) or let momentJS handle the formatting. Whatever you prefer, simply pass the result as parameter to your BO function and the validation won’t cause a problem anymore.

    If you don’t feel like doing all these formatting steps, another alternative would be to change the date fields in your struct data type to String, then you can pass the value from the DatePicker widget to the BO without having to change it at all.

     

    Hope this helps!

     

    Regards,

    Armin

    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi Hannah,

     

    your script seems to work fine for me and pop should be the correct function to use if you want to remove the last element of an array / stack. Can you provide us with more detail about your use case so we get a better understanding what could be the problem for you? Have you tried to inspect the state of the global variable before and after executing the pop function? Does the variable contain all the elements it should before the function is invoked? Or is it not properly assigned to begin with?

    For testing purposes you can create a new variable in your application and select the data type “ITIZ_User_Col” for it. After doing so, you can add some values to your array by clicking on default value and then hitting the + button on the collection several times. This adds some user structs to your array of users. Of course it’s also helpful to provide some meaningful values for the properties first name and last name, just to be able to differentiate between the different elements later on. When you’re done setting the variable and inserting some dummy users, you can add a script block to your process logic and connect it to an event subscription block where you select the onAfterRendering event of the screen that is initially loaded on app start. You can paste your script 1:1 to that script block but please also add a debugger statement in front of the first line, so your application will stop on that line on a breakpoint when you load the application with developer console opened.

     

    Hope this helps!

    Regards,

    Armin

    in reply to: Java STACK.pop()
    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi Pablo,

     

    could you please try to open the certificate in question in your browser or the URL, respectively? A message should be displayed telling you that the certificate is invalid. Hopefully it will also give you a hint on what is the root cause of the problem and help you to fix it.

     

    Regards,

    Armin

    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    1
    Down
    ::

    Hi Zeljko,

     

    first off let me say that everything Chris mentioned in his posting from 2 years ago regarding the specification of the REST API is still valid, so the most important thing you need to be aware of is what kind of data and in which format the data needs to be send to the API. Unfortunately a recording of said web session is not available as it was a paid enabling session between the customer and Simplifier which is usually never recorded or only on agreement of the customer.

     

    Ok, so concerning your use case, your first step would be to set up a REST connector and a corresponding connector call including the necessary parameters and authentication that the API expects. The same goes for passing your data to SAP later on but with another connector using the prefered method of connecting to SAP from your side (SAP RFC, SOAP, oDATA, REST). Now inside your application you can make use of the native camera functionality of your mobile device utilizing a Mobile Action ‘Capture Image’ in Simplifier’s Process Designer and accessing the deployed application via our Mobile Client. The handling of a taken picture and its actual data is quite easy if you make use of our standard client-side Business Object (BO) named “SIMP_FileHelper” which offers a variety of functions to convert the image to a Blob or data url for example. If you don’t find this BO on your instance yet, be sure to first import our Standard Content package to your system.

    The output of the BO function can than be used as an input for your REST connector call. If necessary, any further converting of the data can be done using a script activity in the Process Designer and Javascript code, in that case you can use a variable inside of your application to temporarily store the image data.

     

    Hope this helps you, regards,

    Armin

    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi Christopher,

     

    thank you for bringing this up, we will look into it and update you over here as soon as we’ve found out what the issue is.

     

    Regards,

    Armin

    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    1
    Down
    ::

    Hi Ishant,

    first off thank you very much for your feedback concerning the SQL connector, it is much appreciated.

     

    So, to summarize the status quo and the upcoming changes regarding this topic:

     

    As you mentioned, we have to keep in mind that possible SQL injections are a critical aspect regarding the security of the SQL connector. Therefore the decision was made that the request parameter cannot be set via a server-side business object function anymore and this change was first introduced with the release of Simplifier version 6.0. After hearing feedback from some customers concerning some applications critical to their production environment which would not work anymore after updating due to these changes, we decided to patch it and revert back the changes for version 6.0 until 6.5 will be released in the beginning of September 2021. At the same time however, we implemented two new features to mitigate the issue you’re facing while still allowing some flexibility in regard to SQL statements that are passed from server-side BOs: repeatable statements and dynamic WHERE clauses. Both of them are documented in this new knowledge base article: https://community.simplifier.io/knowledge/dynamic-where-clause-and-repeatable-statements/

     

    We recommend to start refactoring your SQL connector calls and server-side BO functions as soon as possible as to make them work the way it is intended as soon as Simplifier 6.5 will be released and dynamic requests passed by the server-side BO will only work by utilizing the aforementioned two features. This is in order to safe time and pressure later on in the year when you decide to update your systems to the newest version. Please let us know if it should not be possible to adapt all your dynamic queries you have implemented using dynamic WHERE clauses and repeatable statements without losing functionality so we can look for a possible solution for your case.

     

    Regarding your second question if existing applications will stop working after an update, I want to stress out that YES, this will be the case as soon as your system is running on version 6.5 and you try to execute one of these dynamic SQL connector calls that you’ve implemented. You definitely have to rework your queries but in the long term you will benefit from higher security in your applications and less possible manipulations from the client side which is of highest importance in this case.

     

    Hope this answers your questions.

     

    Regards,

    Armin

    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi Patrick,

     

    the widget should be fixed and updated in our Standard Content package which you can get from here and import it to your Simplifier instance. The package will be updated by tomorrow so you should be able to test again in the morning. It should not be necessary to remove the GridList widget from your application as it will be rerendered as soon as the updated version of the widget is imported to the system.

     

    Kind regards,

    Armin

    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    0
    Down
    ::

    Hi Patrick,

     

    thank you for the screenshot you provided to us. It seems that a wrong value was set for the ‘sticky’ property of the GridList widget. We’ll look into the widget script and analyze how it was possible for you to achieve this state. Can you maybe share your configuration of the widget, i.e. any adaptations of properties that you’ve done after inserting the widget to your screen? This would help us to replicate the error you’re facing.

     

    Thank you in advance and kind regards,

    Armin

     

    Update:

    Ok I think I found the problem inside the widget’s template. The sticky property is set to type string. We will need to adapt the widget in our Standard Content. I’ll let you know as soon as we’re done updating and testing the widget so you can import the Standard Content to your instance anew.

    Armin
    Moderator
      Has successfully completed the online course No-Code.
      Has successfully completed the online course Low-Code.
      Has successfully completed the online course Pro-Code.
      Has successfully completed the online course Basics - 100.
    • Topics: 0
    • Replies: 58
    # 2 years ago
    Up
    1
    Down
    ::

    Hi Klaus,

     

    one addition to this topic: There’s a workaround for your use case so you can translate the title of the screen shown in the header bar. You can insert a sap.m.Bar or sap.m.Toolbar into the customHeader aggregation of your screen and then add a sap.m.Title and a sap.m.Button for the back navigation to mimic the behavior of the screen properties. By using this approach you will be able to translate the screen titles in the PO files as usual.

     

    Regards,

    Armin

Viewing 15 posts - 1 through 15 (of 58 total)