Operating the Modern client from the keyboard When the Modern Client was released with Dynamics 365 Business Central Release Wave 2, Microsoft promised to have fixed a lot of the problems that previously held end-user customers from using the Web-Client: Missing shortcuts Missing Quick-Entry Missing Departments menu No Personalization Too many levels in the menus Copy/paste failed periodically So, during my last Application course at @Readynes in Sweden, we decided that we would run half the course in the Dynamics 365 Business Central Spring Release's Windows client and the other half in the Dynamics 365 Business Central Release Wave 2's Modern client. Why only half? Well, because if I only teach the delegates about the Modern client, they will not know how to operate the Windows client running with their customers Dynamics NAV 2009 up to Dynamics 365 BC SR. And trust me, I still have customers running both Navision 3.70 and 4.0 So, being the Kamikaze trainer that I am, we dove right into it. Also, we tried to keep the mouse out of reach, and to operate the client with the keyboard alone. And without further ado, here are our experiences: The Modern client looks more or less like the Spring Release web-client: As in the previous versions F11 (full Screen) helps a lot: Now I have more space for the actual relevant information on the page. The first thing I notice, is the 3 lines in the top-right corner: That is the new Business Features menu, something akin the Departments Menu , but only for the Role Center: This can be accessed by Shift+F12, by the way. These are all the list pages shown on the profile to access directly, but it is also the access way to the new Departments Menu: ( No Shortcut) Here we get all the Lists, Tasks, Administration pages and Reports that we earlier got from the Windows client's Departments menu: Selecting one of the menu items will take me back to the Role Center where it executes the function. Esc , a couple of times will do the same if I don't select anything. F12 (Go-to Role Center) has not been implemented since the web browser uses that for the development menu. How about Ctrl+F12? As appose to the previous versions, it is both possible to personalize, configure Role Centers and design pages. The difference between these are: Personalizing the page is changing the page only for me as a user Configuration of the profile is changing the pages for all users that has been assigned to the profile Designing pages will create an extension and it will affect all users despite profile Personalizing the page Click the Gear icon in the top-right corner of the client and select Personalize : Now the Personalizing bar appear: Click in the page part that you want to change: Hide it or move it to where you want it, in this case I hide it to create more space for my Cues. Personalizing a card page or a list page is a little different: Here it is the Customer list: Click the Gear icon, select Personalize, click ^More to show the + Field action and either drag a field from the Add Field to Page section to the desired place or point to the field that you want to either: Use as Freeze Pane Move somewhere else Hide from the page Exclude from Quick Entry This also applies to the Fact-Boxes: Adding actions to the page, the new Bookmark functionality has been introduced: Use Alt+Q to search for the page you want to add, in this case the Released Production Orders : Click the Bookmark icon and the action has been added to your Role Center: It is just as easy to get rid of an action, click the action, in this case the Transfer Orders: Then unselect the Bookmark and it is gone: Clearing the Personalization To clear the Personalization that has been applied to the page, click the Gear icon again, select the Personalization item and click Clear Personalization . Select the level you want to clear, in this case All : Confirm the action, and the profile is back to the configured profile. Designing the page Designing the pages works the same way, but now it will apply to all users and it will be saved as an extension: Looking at the code that was downloaded, it is apparent that the number series used for the extension is 50100 and forward, so watch out if you have other plans for that number series. Configuring the profile If you want to configure the profile, it is necessary to go to the profiles list. Alt+Q and search for profiles . Press Alt+Shift+F3 to open the Filter Pane and to select the Primary Key. Search for the Order Processor profile and press Shift+F3 to close the Filter Pane Press Shift+F10 to open the line menu: Now select the Customize pages item. This brings out the Profile in Configuration Mode. Here you can hide or move menus, actions and page parts. Example Removing the Sales Journal from the profile: You cannot add new menu items to the page using the new bookmark functionality. This functionality is yet to be implemented. Clicking the Done button, the following message appear: Ctrl+F4 will close the browser tab and bring you back to the Profiles list. Restart the browser for the changes to take effect. Clearing the Customization To clear the customization on a page, it is necessary to go to the Profile card: Here you can click the Clear customized pages action. This will give this warning: Confirm the change and the customization is gone. Restart the browser for the change to take effect. Taking the Modern client for a spin Let's take the Modern client for a spin application wise: Maneuvering the Role Center Open Inventory Setup and activate the Automatic Cost Posting and the Automatic Cost Adjustment Go to the Departments menu to find the Adjust Cost – Item Entries batch Go back to the Departments menu to find the Post Inventory to G/L report Create a new customer with a template from the sales order Create a new Item with a template from the sales order line Post a couple of expenses in the G/L Journal Just to take some random examples. Maneuvering the Role Center Opening the client, it takes a bit of getting used to maneuvering the Role Center. I prefer to start with the F11 to get a full Screen. I still haven't figured out where the cursor is when I start the client, but if I use the Tab and the Shift+Tab and then the Arrow keys, it switches between the different menus. Space , Arrow Down or Enter will expand the menus: If I accidently open a page, I can always go back with Esc . It seems clear that the fastest way to access a page is to use the Alt+Q function and search for what you need. It is also clear that the Next-next installation I made of the D365BC RW2 has ignored my Region and my time zone. Opening My Settings shows this: Region is set to English (United States) but my Regional settings actually states this on my server and client: Also, I would like to be in Baja California but my Time Zone on the server has been set to: The service tier makes it even more confusing: So, make sure to adjust these before you start using the client. Preparing for the flows In order to run a few flows, I want to activate the Automatic Inventory Batch and the run it manually to get it up to speed. That can be done by: Set the Automatic Cost Posting in the Inventory Setup Set the Automatic Cost Adjustment in the Inventory Setup Run the Adjust Cost – Item Entries Run the Post Inventory to G/L So, opening the Inventory Setup is Alt+Q and type Inv Set : Then go back to the Role Center with Esc . Even though it says ü SAVED in the top, we realized that e.g. changing a Customer on the Customer card, it actually said ü SAVED in the top, but the customer was not actually saved until we left the page. Then I press Shift+F12 to go to the Business Features menu. Here it is actually possible with a little Shift+Tab and Arrow keys to press the Explore All action. Now I can Tab my way through the modules until I land on the Finance module, then with the Arrow keys to select the Adjust Cost Item Entries batch. It is way easier to use Alt+Q and type Adjust Cost and select the Adjust Cost Item Entries batch. Same thing with the Post Inventory to G/L. Next Run a Flow Creating a new Vendor and Item directly from the Purchase Order Use Alt+Q and search for Purchase orders . It is not possible to create a new with Alt+N from the list, but if I press Space or Enter to open the first, then I can create a new with Alt+N . Notice that I am already three pages in here: Typing My New Vendor in the Name field, will give me this: I then select the template: Ctrl+Enter will Jump to the Ok button and Ctrl+Enter will select and close the selection. Ok ok, so I made a typo creating the vendor. But now I cannot create a My New Vendor by using the same functionality with it automatically selecting the My New Window vendor. I have to delete the wrong one first. Hmmmm. Correcting that, I now have a My New Vendor , and Ctrl+Enter will select the new vendor and return to the purchase order: In the Purchase order, I can use the Personalization to select which fields should be included in Quick Entry, making it much faster to enter data, In this case I only want to keep Vendor Name , Contact and Vendor Shipment Date on the header: And from the lines I only want to land in Type , No , Quantity and Direct Unit Cost . This way I can enter data quickly into the purchase lines: This means that I can enter a full Purchase Order by typing: Alt+N to create a new Type the vendor name and press Enter Type the contact (if needed) and press Enter Enter the Requested Shipment Date and press Enter Now I'm in the, Type field of the Lines , type I for Item and press Enter Type the Item number and press Enter Ups, now it jumped to the next line instead of moving to the Quantity field. This must be fixed! Going back to the Type field above and pressing Enter , it jumps to the No. field and next to the Quantity , but always after entering the No. it skips to the next line. A super cool feature is that it is possible to expand the page to show more or less on the page: normally it will show this: But if I click the Open in a New Window icon, I get the purchase order in a separate window: But If I click the two arrows in the corner instead: It shows this: If I instead had clicked the (i): I can toggle the FactBox area on and off. And lastly, if I click the Focus icon: Then I get a window with only the lines: This is super cool. If I want to create new items directly from the lines, it must be set up first. So on to the Purchase & Payable Setup page with Alt+Q . Turn it on and return to the purchase order. Type an unknown Item Description in the No. field and the following message appears: Create the new Item using a template: Press Ctrl+Enter twice to return to the purchase order line. See the statistics using F7. Post the Purchase Order using F9 or Shift+F9 . Post a couple of expenses in the G/L Journal After this relatively successful creation of purchase orders with new vendor and new item, what about the General Journal? Previously there have been massive criticism due to lack of user-friendliness in the journals. Let's check if that has been resolved too. Opening the General Journal by pressing Alt+Q and searching. The first thing I notice, is the lack of fields: The Document Type , the Account Type and many other fields are simply missing. Personalization does not help either. It is not until I find an action in the Page menu called: Show More Columns , I get the full amount of fields in the General Journal. I'm sorry, this has no place in a journal, used daily by thousands of accountants and bookkeepers. It looks like something made for people entering expenses on the road via the Phone or the Tablet App. Fine, they should also have some new functionality, but it should be as a function you turn on, not something that will annoy the ¤#%"¤ out of the primary users that are using the general journals every day. Luckily the General Journal is the only place where it has been implemented. Clicking the Show More Columns will bring the page back to normal. Now the big job begins. Trimming the journal: I remove the fields not needed in my company: Account Name (it is already in the footer of the page) EU 3-Party trade Correction Comment And the dimensions not used by me Then I add new fields needed by me: VAT Prod. Posting Group Bal. VAT Prod. Posting Group Then I exclude all fields from Quick Entry except: Posting Date Document Type Account Type Account No Description Amount Bal. Account Type (can be omitted if a default has been setup on the batch) Bal. Account No. (can be omitted if a default has been setup on the batch) This way I can create lines with only touching eight fields. After Bal. Account No. it jumps to the next line. Together with the new way of adjusting the column widths makes it much easier than before. Also, here we can use all the good old shortcuts: Alt+Arrow Down : Lookup Shift+F11: Align + Set Align Id Ctrl+F7: Ledger Entries F9: Post Shift+F9: Post+Print With RW2 we don't even need to wait for the server response any longer. Now it is just typing and pressing enter just like in the good old days. This is perfect. Conclusion We are getting there. There are still small glitches, but in the whole, this is what the users have been asking for. There are still many levels in the menus, but somehow you learn to get around that. There can always be more shortcuts and adjustments: Jump to the Role Center Alt+N from the list pages Access the Departments menu Make the Quick entry work on the Document line pages You still cannot edit the Field-Mapping in the Data Exchange Definition The Intrastat Journal still does not show the errors on the page And so on… But the majority of the functionality is there, and I must admit, that after only two days, I realized that I can roll with this on a daily basis. So, when CU1 version shows up, I'm going to upgrade to that. Just one word of caution, like the old classic client, it is possible to accumulate a lot of open pages, and sometimes it is necessary to close them all by clicking Esc a lot of times. This will be part of my upgraded Role Tailoring book, so stay tuned.
↧
Blog Post: Taking the modern client for a spin
↧
Blog Post: Business Central OnPrem install + Azure Database
Few weeks ago I was preparing our Azure hosted environment and I wanted to: 1) Have BC OnPrem installed on VPC in Azure 2) Using multitenant environment using Azure Database Ok, easy task. Creating VPC in azure, uploading install DVD, running install. Block number one When filling up the configuration parameters, you need to enter SQL server address and database name. The plan was to install Cronus DB to azure and later transform it to multitenant App DB and Tenant DB. Thus I filled in the Azure SQL address and selected DB name. Install... After some time, installer failed. Ok, I thought that the problem is that it cannot restore DB from bak file. Solution: restore the DB locally (removing the windows users, removing deadlock monitorig), creating bacpac, uploading to azure, creating the database from it. Repeat the installation with existing database. Block number two With existing DB I expected that I will go further, but still, at the end, it failed. It failed to install Service Tier. Looking into Event log I found that it cannot authenticate to the Azure DB - and the reason is clear - windows authentication is not supported. I need to enter the DB credentials somewhere. But there is no choice for that in the install dialog! Ok, what about installing the Service tier and enter the DB credentials later? No way, because the installation will fail (and rollback the Service Tier installation) when the Service Tier cannot be started at the end of the process. Hmm, what about entering the DB authentication during the install, after all is installed and the install process is trying to start the service tier? Tried that, was able to enter the db credentials, but still, the install process failed, even when I was able to start the service tier manually. I assume that the install process received error code and is not checking that the service is running at the end because someone else started it correctly. Thus leading to Service Tier uninstallation again. Time to read documentation: https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/deployment/deploy-database-azure-sql-database Based on the documentation, I should prepare the Azure DB (ok, done), and than configure the service tier. Ok, Problem is, that whole doc is expecting that there is local SQL for the DB. I do not want to have any SQL on my VPC! I want to have as much clean VPC as possible! Hey, I really want to setup the DB authentication on the service tier, but I cannot because I do not have the service tier at all, because I cannot install it until I have some DB with windows authentication. This is deadlock for me - cannot setup DB authentication because I do not have Service tier, and I do not have Service tier because I cannot setup DB authentication! Solution Lucky I have some experience with installations and MSI files and I expect that there is setting that the installed service should be started as part of the installation. What if I turned this off? Looked for MSI editor and found one I used long, long, long time ago - ORCA . Start the editor, open the MSI for Business Central Server and go to section ServiceControl. There is entry with ServiceControl = StartOnInstall, where Event = 1. Checking doc for this table explains that Event 1 means " msidbServiceControlEventStart ". Hmmm, looks promising. What to set instead? In doc there is value 4, described as "(none)". Looks good. Set the 4 instead 1, save the file. After this small change, I am running the install again, and, result is, that the Service tier is INSTALLED even when it cannot be started! Great! Now I can set the database authentication, set my Azure database, create multitenant... and continue with the work. I hope that this could help someone solving same problem when going to the cloud. Please, be warned! You are tempering install files on our own responsibility! Official way is to install the service tier with some Non-Azure SQL server available (e.g. local SQL express). I was doing that just because I wanted to not install SQL on my VPC and because I am hard-headed :-)
↧
↧
Comment on Taking the modern client for a spin
Awesome Peik. Thanks for the Experience Feedback! Much Appreciated.
↧
Blog Post: Visual Studio Online preview: coding in the browser seems promising.
Today at Ignite 2019 Microsoft has launched the public preview for Visual Studio Online , a managed cloud-based development environment based on Visual Studio Code that works in the browser. The tool is actually not finished (it’s a preview version) but I think it’s extremely promising and it opens the doors to many interesting scenarios for developers (imagine to be able to edit and review code directly from a tablet or a smartphone or a mobile device everywhere you are). I’ve played few minutes today with the preview version. To use Visual Studio Online, as a first step you need to create an environment: An environment is based on an instance type (VM) totally transparent to you and actually only based on Linux (you can choose between a Standard and a Professional version, differences are only the number of cores and memory). When you click Create, the environemt is created on your Azure subscription in few seconds: You can create different environments. To start working, select an environment and magically Visual Studio Code IDE appears to you on the browser: Now you can install the extensions you need from the marketplace, exactly like you do in the standard Windows version. For my small test, I’ve firstly installed the Azure Function extension and I’ve created a simple HTTPTrigger function: I was able to create the function and working on the code like in the standard Visual Studio Code version, all from a browser window (the only small problem was the intellisense that sometimes is lacking). Wonderful! But can a test be finished without trying to use the AL Language extension? NO! So, I’ve installed the AL Language extension from the marketplace: Now I want to create a new extension project (AL:Go!): Select a folder for your project (it’s based on the VM file system): then select the target platform (for example 4.0): and voilà! Your AL project is created: Unfortunately, with AL you can only write code in the browser without intellisense and compilation (you don’t have the launch.json file and the alc.exe compiler), but it’s a nice and promising starting point (I think that things will change in the next days).
↧
Forum Post: Unexpected end tag error in BC wave 2
Hi all, I have a simple variable text XMLport which imports data into two fields of a custom table. But I get the following error when I pass 'invoice' as transaction type and transaction ID 1. This is how I'm testing it:- I am clueless on what is wrong. Any help would be highly appreciated. Thanks
↧
↧
Forum Post: Stock ageing
Hi all!!! I have made a stock ageing report based on the current location of stock e.g. if I bought a stock of 300 kgs on 1/April/2019 and it is transferred on 05/Nov/2019 it shows the ageing as 0D on the current date and location, but I want the ageing from 1/April/2019 irrespective of how many times it has been transferred. Any kind of help would be much appreciated.
↧
Forum Post: RE: Unexpected end tag error in BC wave 2
It's most likely an error in the file you're trying to import. Try to open the XML file using Internet Explorer, that will typically show you the problem.
↧
Forum Post: Copy records from table to same table of another company
Hi All, Business Case: As project manager I would like to copy already created project on company A to company B. Purposed solution: Create page to specify project and company where to copy that project to. User can select a project and a company to copy the project to. It cannot be copied to same company where project already exists (added control/error message). I have created a page "Copy Project" and codeunit "Copy Project". Technical design: Table Job has inserted record in company A -> project is always copied from HQ company A, but it might changes in the future to be able to copy from any company (for now, not). Table Job in company B can have some records since some projects can already exists, so I will just insert new record from company A, but first will check if any record of same number series value exists and if it does then an error message pops, if not, then new record is going to be inserted in table Job in company B Table A of company C - same goes for company C (we have 8 companies in database) Page "Copy Project" Globals: CopyJobCU | datatype=codeunit | subtype=50000 (this is the ID of codeunit I use to call it on this page) Page fields: Field1=Company From Field2=Company To - both fields are linked to source table ID 20000006 = Company - user selects a value from dropdown list (data are read from T20000006) On trigger: OnQueryClosePage I have added the code to call the codeunit: IF CloseAction IN [ACTION::OK,ACTION::LookupOK] THEN BEGIN ValidateUserInput; CopyJobCompany.RUN; Message(Text001); END; In onRun trigger of codeunit "Copy Job" I have added code IF CopyJob."Company To" <>'' THEN BEGIN CompanyTo := CopyJob."Company To"; CASE CompanyTo OF CompanyTo::'WKA' : BEGIN JobTo.CHANGECOMPANY('WKA') JobTo.TRANSFERFIELDS(JobFrom) //whole record - will change to required fields JobTo.INSERT(TRUE); END; CompanyTo::'WKB': BEGIN JobTo.CHANGECOMPANY('WKB') JobTo.TRANSFERFIELDS(JobFrom) JobTo.INSERT(TRUE); END; ComapnyTo::'WKC' : BEGIN JobTo.CHANGECOMPANY('WKC') JobTo.TRANSFERFIELDS(JobFrom) JobTo.INSERT(TRUE); END; END; My issue is that I cannot figure out how to get selected value from fields: "Company From" and "Company To" where user selected them on page, and I need to past them on Codeunit as a variable so I can filter per "CompanyTo" inside the codeunit. I think I should use local variable, but it does not work since I have added this: local function=Copy which has local variable=CompanyToCopy | DataType=Page | Subtype=Copy Project Thanks for any suggestions, Damjan
↧
Forum Post: RE: Copy records from table to same table of another company
The Page "Copy Project" should have 2 global variables for the Globals and linked to fields: Field1=Company From (E.g. CompanyFrom) Field2=Company To (e.g. CompanyTo) The codeunit "Copy Job" should have the same 2 Global variables and procedure like SetFromToCompanies(CompanyFrom2: Code[50], CompanyTo2: Code[50]) // to be honest I don't remember the light for Company field CompanyFrom := CompanyFrom2; CompanyTo := CompanyTo2; And before CopyJobCompany..Run you need to write the function CopyJobCompany.SetFromToCompanies(CompanyFrom,CompanyTo) P.S. Why do you use the CASE-function for same operations? P.P.S. it is good to have the Clear(CopyJobCompany) before you use Run
↧
↧
Forum Post: RE: Stock ageing
Could you re-phrase or write more clear (you wrote the report and it is not clear what operations inside)?
↧
Forum Post: RE: Stock ageing
what I need here is the ageing of the stock from the day it was entered in the system, no matter on which location it is. If it was purchased on 3/June.2018 and it still has remaining quantity it should show its ageing from 3/june/2017 to the current date.
↧
Forum Post: RE: Copy records from table to same table of another company
Hi RedFoxUA, I was able to resolve my issue with your assistance. I have added 2 identical Global Variables = CompanyFrom (text, 50) and CompanyTo (text, 50) on Page and Codeunit and then on both objects also function SetFromToCompanies to fill both global variables from that page into the CU. I have redesigned my code to transfer complete record from table A of companyFrom to table A of CompanyTo, and removed CASE sentance, since I do not need it, now. I will have to add linked tables of project to be transferred at the same time as the project is being transferred. Thank you, Damjan
↧
Forum Post: RE: Dynamics BC task scheduler is only running once
Same problem for me. Have you found a solution? Thanks
↧
↧
Blog Post: Dynamics 365 Business Central: exporting a database backup from a SaaS tenant
Microsoft has recently activated the feature for downloading a backup of a Dynamics 365 Business Central SaaS tenant. A database can be exported from a selected environment as a .bacpac file, can be automatically saved into an Azure Storage account and from there you can download it offline and restore it into your on-premise network (multi-tenant database). How this feature works? As a first step, you need to have an active Azure subscription and here you need to create an Azure Storage account (you can do that directly from the Azure Portal in few easy steps). Then, from your Azure Storage account click on Shared Access Signature in order to create a key for a secure access to your storage: Here, create the shared access signature key with the permissions as follows: A shared access signature usually have a starting and ending date and the key to access the storage account is valid in this date range (from – to). Here you should create a key with a time range that permits you to perform the environment backup (I’ve set it to 1 day). Then click on Generate SAS and connection string and you will have your generated keys: You need to copy the Blob service SAS URL key. You’re ready to start the tenant backup. Now go to your Dynamics 365 Business Central Admin center, select an environment to export (here I’ve chosen my Production environment) and click on Database|Create Database Export : In the Create Database Export window, select a file name for your backup file (.bacpac), insert the SAS URI previously copied and select a Blob container ( Container Name ) from your storage account (this is the container where the backup file will be saved). If you don’t have a container, it will be created for you: Click Create and after a bit of time (it depends on the database size) the .bacpac file will be saved into your Azure Storage account. Quite easy isn’t it? Only some important notes to remember: Each environment is actually limited to 10 exports per months . Create the Azure Storage Account in the same Azure Region where your Dynamics 365 Business Central tenant is located (this is form performance reasons) You cannot export a database if you have a trial tenant . In this case, you receive the following message if you try to execute the Create Database Export feature:
↧
Forum Post: RE: Payroll import Business central cloud
No, you need to enable it first in the page. Its just set to visible=false.
↧
Comment on How-to: Create a Workflow Template
Never really have been back on this topic I can now tell that you can create a template from the UI and a publisher is now provided.
↧
Forum Post: RE: Stock ageing
I understood you very well, but it is your report. What do you have for DataSet? Do you use the "Posting Date" field and|or warehouse entry? E.g. if you use the "posting date" field from the "Item Ledger Entry" table you never receive 0D for it. => it is hard to help you without additional information!
↧
↧
Forum Post: RE: Unexpected end tag error in BC wave 2
Thank you. Yes, the issue was with the data in blob field.
↧
Forum Post: RE: REPORT - LIMIT TOTALS
Hi - does anyone actually know why standard code has been written to show the date in the limit totals filter as "work date -1"? Trying to explain it to a customer and not coming up with a satisfactory reason. Many thanks
↧
Forum Post: Changing the posting date while ` reversing the payment entries
Hi Folks, when i reverse a payment voucher it reverse on the same date. i want option to reverse on same date and also on which date the user want to reverse. kindly suggest.
↧