FELTMAN. I'VE BEEN WORKING IN FARGO 
IN THE BUSINESS CENTRAL PRODUCT 
FOR THE LAST FOUR YEARS. TODAY WE'RE 
GOING TO TALK ABOUT BUILDING CONNECT 
APPS FOR BUSINESS CENTRAL. I'LL 
GIVE YOU AN INTRODUCTION ABOUT WHAT 
CONNECT APPS ARE. THE APIS THAT 
WE USE FOR CONNECT APPS, WEB HOOKS. 
WE'RE GOING TO TALK BRIEFLY ABOUT 
CDM AND THE GRAPH AND APP SOURCE. 
BEFORE WE GET STARTED, DISCLAIMERS, 
THIS SAYS THAT ANYTHING I SAY IS 
PROBABLY WRONG BECAUSE IT'S EARLY. 
I THOUGHT ABOUT PUTTING A THING 
IN HERE THAT THE READERS OF THE 
DISCLAIMER CHOOSE NOT TO ROLL THEIR 
EYES AT THE PRESENTER. IN BUSINESS 
CENTRAL WE HAVE THREE MAIN WAYS 
OF CUSTOMIZING IT AND IT DEPENDS 
ON WHAT SCENARIO BEST FITS YOU. 
WE HAVE CONNECT APPS, WHICH I'LL 
TALK ABOUT TODAY. WE ALSO HAVE ADD-ON 
APPS AND INDIVIDUAL CUSTOMIZATIONS. 
CONNECT APPS ARE DIFFERENT IN THAT 
YOU'RE NOT INTEGRATE INTO THE PRODUCT. 
YOU'RE ACTUALLY DEALING WITH A SERVICE 
THAT YOU'VE BUILT OUTSIDE OF BUSINESS 
CENTRAL AND YOU'RE COMMUNICATING 
WITH APIS THAT WE'VE DEFINED TO 
INTEGRATE WITH IT TO PERFORM WHAT 
IT IS YOU WOULD LIKE TO DO. IF YOU 
THINK ABOUT, FOR EXAMPLE, PAYROLL, 
SAY YOU'VE BUILT A PAYROLL SERVICE 
AND YOU WANT TO INTEGRATE YOUR PAYROLL 
SERVICE WITH BUSINESS CENTRAL, MAYBE 
BUSINESS CENTRAL IS WHERE YOUR CUSTOMERS 
ARE HOUSED AND YOU WANT TO RUN PANEL 
OPERATIONS. YOU MIGHT NEED TO GET 
INFORMATION FROM BUSINESS CENTRAL, 
SAY COMPANIES AND THE ACCOUNTS, 
THE THINGS THAT ARE AVAILABLE FOR 
YOUR CUSTOMER. AND ONCE YOU'VE DONE 
EVERYTHING YOU NEED TO DO, YOU'LL 
WANT TO PUSH THOSE BACK INTO BUSINESS 
CENTRAL SO YOUR CUSTOMERS SEE THAT 
DATA AND EVERYTHING IS DONE. AND 
THAT'S WHAT CONNECT APPS ARE. IT'S 
YOU'VE BUILT SOMETHING USING WHATEVER 
LANGUAGE YOU WOULD LIKE, USING HOWEVER 
METHOD YOU WOULD LIKE, YOU'VE BUILT 
SOMETHING ON THE OUTSIDE AND YOU 
WANT TO INTERACT WITH BUSINESS CENTRAL 
TO GET WORK DONE. WE DO THAT BY 
DEFINING A WHOLE BUNCH OF API'S. 
AND THE API'S ALLOW OTHERS TO INTEGRATE 
WITH BUSINESS CENTRAL AND PERFORM 
THOSE OPERATIONS. BUSINESS CENTRAL 
SITS OUT THERE IN THE SaaS AND THE 
CLOUD. IT'S A PRETTY COMPLEX MACHINE. 
THERE'S A LOT OF STUFF GOING ON, 
A WHOLE BUNCH OF ENTITIES. WE'VE 
CREATED A SET OF API'S THAT ARE 
MORE SIMPLISTIC. THEY'RE A SIMPLER 
FORM AND IT WORKS LIKE A SHIELD. 
IT'S NOT AS COMPLEX AS BUSINESS 
CENTRAL BUT YOU GET A LOT OF COMPLEXITY 
FROM A SIMPLE INTERFACE. YOU CAN 
WORK WITH CUSTOMERS WITHOUT HAVING 
TO WORRY ABOUT HOW CUSTOMERS RELATE 
TO ALL THESE OTHER TYPES OF THINGS 
AND YOU CAN BUILD SOMETHING THAT 
WORKS BEST FOR YOU USING THE APIS 
THAT WE'VE PROVIDED. OR YOU CAN 
CREATE YOUR OWN APIS BY USING AN 
ADD-ON APP AND THEY WORK TOGETHER. 
I MENTIONED THAT THE DIFFERENCE 
WAS THAT A CONNECT APP YOU'RE SITTING 
ON THE OUTSIDE, SOMETHING YOU BUILT, 
AND ADD-ON APPS, YOU'RE EXTENDING 
BUSINESS CENTRAL'S NATIVE FUNCTIONALITY. 
SOMETIMES CONNECT APPS ARE WORKING 
WITH THEIR APIS AND THEY DECIDE 
IT WOULD BE REALLY NICE IF WE ALSO 
HAD THIS API OR SOMETHING ELSE THAT 
WE WOULD LIKE INSIDE OF THE PRODUCT. 
WELL, IF YOU BUILD AN ADD-ON APP 
YOU CAN ADD THE APIS AND EXPOSE 
THEM AND SUDDENLY YOUR CONNECT APP 
IS NOW WORKING WITH THE THINGS YOU'VE 
EXPOSED FOR YOUR CUSTOMERS AND YOU 
CAN PERFORM ALL THE FEATURES THAT 
YOU WOULD LIKE. YOU'VE EXPOSED THE 
NEW FUNCTIONALITY INSIDE OF BUSINESS 
CENTRAL. YOU CAN SEE THE DIFFERENCE 
HERE. THE STRENGTH IS YOU'RE IN 
BUSINESS CENTRAL. YOU GET TO MODIFY 
AND EXTEND A WHAT'S THERE. YOU NEED 
TO KNOW BUSINESS CENTRAL. YOU'RE 
WRITING SOMETHING DIRECTLY FOR IT. 
YOU NEED TO KNOW THE PRODUCT. WITH 
CONDUCT APPS, YOU CAN'T MODIFY. 
YOU'RE ONLY INTEGRATING FROM THE 
OUTSIDE. YOU DON'T GET TO CHANGE 
HOW THE PRODUCT WORKS ON THE INSIDE. 
WHAT WE'RE SEEING HERE IS A LIST 
OF THE AVAILABLE APIS. THIS IS WHAT 
WE HAVE TODAY. THIS IS WHAT COMES 
STANDARD. WE'VE COME UP WITH THESE 
FOR VERSION 1 OF CONNECT APPS AS 
A SET OF COMMON ENTITIES AND MODELS 
AND FUNCTIONS THAT WE KNOW THAT 
PEOPLE ARE GOING TO USE. MOST EVERYBODY 
IS GOING TO HAVE TO DEAL WITH CUSTOMERS. 
THEY'RE GOING TO HAVE TO DEAL WITH 
VENDORS OR ACCOUNTS OR THESE KINDS 
OF THINGS. SO THIS IS THE INITIAL 
SET. LIKE I SAID, YOU CAN EXPAND 
THEM IF YOU BUILD AN ADD-ON APP 
AS WELL. OUR PHILOSOPHY WITH THESE 
APIS IS THAT WE KEEP THEM SIMPLER 
THAN THE BACKEND ENTITIES. AS I 
WAS TALKING ABOUT WITH THAT SHIELD, 
THEY'RE A LITTLE EASIER TO DEAL 
WITH. YOU ONLY HAVE TO CARE ABOUT 
WHAT YOU CARE ABOUT. WE KEEP THESE 
FIXED. SO WE COME OUT WITH AN API 
AND IT'S AT A CERTAIN URL. IF WE 
CAME OUT WITH A NEW VERSION OF THE 
APIS, WE NEED TO HAVE THAT BUMPED. 
THERE WOULD BE A NEW ENDPOINT CALLED 
VERSION 2-0. AND IT WOULD REMAIN 
THE SAME. YOU DON'T HAVE TO NECESSARILY 
RESPOND TO THEM. YOU CAN KEEP USING 
THE OLD APIS AND THEY ALL REMAIN 
CONSISTENT. ALL OF THEM ARE EXPOSED 
AS WEB SERVICES. IT'S HOW YOU COMMUNICATE 
WITH THEM. AND THEY WORK IN SaaS 
OR IF YOU HAD AN ON-PREM INSTALLATION 
OF BUSINESS CENTRAL, YOU COULD EXPOSE 
THEM AS WELL. IT'S A WEB PROTOCOL 
THAT WAS DEVELOPED TO KIND OF STANDARDIZE 
A WAY OF COMMUNICATING BETWEEN SERVICES. 
IT'S A -- IT GOES WITH A LOT OF 
STANDARD WAYS OF ACCESSING DATA, 
PUSHING NEW DATA INTO IT AND DELETING 
OR PATCHING THAT DATA. WE SUPPORT 
BASIC QUERYING SUPPORT, SO YOU CAN 
QUERY ENTITIES, YOU CAN ACCESS BUILT-IN 
FUNCTIONS. WE CALL THEM BOUND ACTIONS 
AND I'LL SHOW SOME OF THOSE LATER. 
YOU CAN MODIFY THE DATA. WE ALSO 
SUPPORT BATCH, WHICH IS JUST WHERE 
YOU'VE GOT 15 DIFFERENT THINGS TO 
DO. RATHER THAN MAKE 15 DIFFERENT 
WEB CALLS, WHY NOT PUT THEM ALL 
IN THE SAME CALL? IT SAVES TIME 
ON COMMUNICATION AND PROCESSING 
BETWEEN THE TWO. SO, THE BASICS 
OF THE APIS, THERE IS DOCUMENTATION 
THAT YOU CAN FIND ONLINE. IT'S IN 
THIS DECK AND OTHERWISE. BUT SOME 
OF THE TIPS AND THINGS YOU SHOULD 
BE AWARE OF IS THINGS ARE METADATA 
DRIVEN. WHEN YOU GO OUT AND ACCESS 
THE APIS, WHAT YOU REALLY WANT TO 
DO IS TAKE A LOOK AT WHAT'S AVAILABLE. 
WE HAVE AN ENDPOINT THAT SHOWS YOU 
WHAT IS CURRENTLY AVAILABLE AND 
THEN YOU CAN RESPOND TO THAT INSTEAD 
OF HAVING TO KNOW AHEAD OF TIME 
ALL OF THE ENTITIES THAT ARE AVAILABLE. 
THIS IS A NICE WAY OF DISCOVERING 
NEW CHANGES, FIGURING OUT WHAT'S 
HAPPENED OR NEW. EVERYTHING IS ACCESSED 
VIA A SINGLE ID. AND YOU ACCESS 
A RESOURCE USING THAT ID. AND ALL 
OF THEM SIT INSIDE OF THE CONTEXT 
OF THE COMPANY. IF YOU'RE NOT FAMILIAR 
WITH BUSINESS CENTRAL, YOU'RE ALWAYS 
IN A COMPANY. YOU'RE DOING THINGS 
INSIDE OF A COMPANY FOR A CUSTOMER. 
SO ALL OF THE ENTITIES ARE ACCESSED 
UNDERNEATH THAT PARENT BANNER OF 
A COMPANY. IF YOU THOUGHT THAT WAS 
TECHNICAL, WE'LL GET A LITTLE BIT 
MORE TECHNICAL THROUGH A DEMO SHOWING 
YOU WHAT THESE LOOK LIKE. SO I'M 
GOING TO SWAP OVER TO THAT. MAKE 
SURE IT SHOWS UP. IF YOU'RE NOT 
FAMILIAR, IT'S JUST A LITTLE TOOL 
-- WELL, IT'S ACTUALLY A BIG TOOL. 
I LIKE IT QUITE A BIT. IT'S A TOOL 
FOR HELPING YOU CRAFT A WEB SERVICE 
CALL AND LOOKING AT THE RESPONSES. 
IT'S GOT A LOT OF FEATURES. I REALLY 
LIKE IT SO I TEND TO PROMOTE IT. 
WHAT YOU'RE SEEING HERE IS JUST 
ME SETTING UP A CALL TO A TENANT 
THAT I HAVE OUT IN BUSINESS CENTRAL 
RIGHT NOW. IT'S A SANDBOX TENANT. 
THIS IS THE URL I'M GOING TO CALL 
OUT. IT'S IN THIS CURLY BRACES BECAUSE 
IDENTIFY GOT A LIST OF VARIABLES 
SO I DON'T HAVE TO TYPE IT OUT EVERY 
SINGLE TIME. THIS POINTS OUT TO 
API. BUSINESSCENTRAL. DYNAMICS. 
COM . AND THEN IT HITS THE VIEWPOINT 
INSIDE OF BUSINESS CENTRAL. IF I 
HIT THIS, I SEE A LIST OF ALL OF 
THE APIS AND ALL THE ENTITIES THAT 
WE'RE EXPOSING FOR CONNECT APPS. 
JUST TO SHOW YOU, I'LL TRY TO SEND 
THAT AND WE GET A RESPONSE BACK 
HERE. IF WE WERE TO ACTUALLY CORRELATE 
THIS WITH THAT BIG LIST OF APIS, 
THEY'LL ALL MATCH UP. THERE SHOULD 
BE LIKE 48 DIFFERENT OF THESE ENTITIES 
INSIDE OF HERE. AND THIS WILL TELL 
YOU THAT THESE ARE THE THINGS THAT 
YOU CAN ACCESS WITH YOUR APIS. YOU 
CAN ACCESS SHIPMENT METHODS, PAYMENT 
METHODS, BUT IT DOESN'T TELL YOU 
TOO MUCH ABOUT WHAT THEY'RE MADE 
OF. IT TELLS YOU THEY EXIST BUT 
IT DOESN'T TELL YOU OTHER PROPERTIES. 
FOR THAT YOU GO AND TAKE A LOOK 
AT THE METADATA. THAT DOESN'T LOOK 
NICE IN JSON FORMAT. UNDER THE SAME 
URL PATH, IF YOU JUST PUT IN DOLLAR 
SIGN METADATA AND THIS IS A COMMON 
CONCEPT. I'LL HIT IT JUST SO YOU 
CAN SEE. AND I'VE GOT TO CHANGE 
IT TO DISPLAY IN XML. THIS IS THE 
DEFINITION OF ALL OF THOSE APIS. 
IF WE TAKE A LOOK, WE HAVE -- LET'S 
FIND A CUSTOMER. HERE'S THE CUSTOMER 
ENTITY. IF YOU'RE GOING TO INTERACT 
WITH THE CUSTOMER, YOU CAN SEE ALL 
THESE DIFFERENT FIELDS AND ALL THESE 
DIFFERENT PROPERTIES THAT ARE ASSOCIATED 
WITH THE CUSTOMER. IN ADDITION TO 
THE PROPERTIES RIGHT ON THERE, WE 
HAVE SOMETHING CALLED NAVIGATION 
PROPERTIES. THESE ARE VARIOUS ENTITIES 
ASSOCIATED WITH A CUSTOMER. FOR 
INSTANCE, YOU MIGHT HAVE A PICTURE 
FOR A CUSTOMER. IN BUSINESS CENTRAL, 
WE SHOW A NICE LITTLE PICTURE SHOWING 
THE CUSTOMER'S FACE. YOU CAN GET 
THAT INFORMATION FROM HERE. YOU 
CAN FIGURE OUT WHAT TYPE OF CURRENCY 
THIS CUSTOMER USES. ALL THESE THINGS 
ARE PROPERTIES THAT ARE LINKED TO 
YOUR CUSTOMER. NEXT WE CAN SHOW 
YOU COMPANIES. AS I SAID, EVERYTHING 
EXISTS UNDERNEATH THE CONCEPT AND 
THE SCOPE OF A COMPANY. IF YOU WANT 
TO PERFORM ANY OPERATIONS, YOU NEED 
TO KNOW WHAT COMPANIES ARE AVAILABLE 
FOR A GIVEN CUSTOMER. YOU MIGHT 
NOT NECESSARILY KNOW WHAT CUSTOMERS 
YOU HAVE AHEAD OF TIME. THEY'RE 
NOT NECESSARILY REGISTERING WITH 
YOUR SYSTEM PERHAPS. AND INSIDE 
OF YOUR SERVICE, THEY POINT TO THEIR 
BUSINESS CENTRAL LOCATION AND DEPLOYMENT. 
WELL, THEN YOU NEED TO DISCOVER 
WHAT COMPANIES ARE THERE. SO WE 
PROVIDE AN OPTION TO DO THAT VIA 
THE COMPANY'S ENDPOINT. YOU GET 
THE ID FOR THE COMPANY AND ALL THE 
INFORMATION ASSOCIATED WITH IT. 
THE DISPLAY NAME, THE NAME OF IT 
THAT WE WOULD USE INSIDE OF THE 
PRODUCT AND WHATNOT. OKAY. SO, GOING 
BACK TO THE PRESENTATION JUST A 
LITTLE BIT, WE'LL COME BACK TO THIS 
JUST A SECOND AS WE EXPLORE A LITTLE 
BIT MORE. YOU'VE SEEN THAT YOU CAN 
QUERY THE APIS, THE METADATA, YOU 
CAN QUERY SPECIFIC COMPANIES, BUT 
WHAT HAPPENS WHEN YOU'VE GOT A GIANT 
LIST OF THINGS AND YOU WANT TO FILTER 
THAT DOWN OR YOU ONLY CARE ABOUT 
CERTAIN SUBCOMPONENTS OF AN ENTITY? 
THAT'S WHERE SOME OF THE OLD DATA 
OPERATIONS COME INTO PLAY. SO YOU 
CAN FILTER. IN THIS CASE, THIS QUERY 
WOULD BE LOOKING AT SALES INVOICES. 
AND WE'RE LOOKING AT SALES INVOICES 
WHERE THE STATUS OF THAT SALES INVOICE 
IS OPEN. SHOW ME ALL THE OPEN INVOICES. 
INSTEAD OF SEEING THE ENTIRE LIST 
OF EVERYTHING, YOU'RE ONLY LOOKING 
AT A SUBSET. THIS IS USEFUL BECAUSE 
MAYBE YOU DON'T CARE ABOUT EVERYTHING 
THAT EXISTS IN THE WORLD. YOU JUST 
WANT TO SHOW THEM THE DETAILS ABOUT 
THAT ONE THING. YOU DON'T WANT TO 
GO GRAB THE WORLD. YOU ONLY WANT 
TO GRAB THE DETAILS ABOUT THE THING 
THEY'RE LOOKING AT. THERE'S ALSO 
EXPAND. A GOOD EXAMPLE OF THIS ARE 
SALES ORDERS. SALES ORDERS ARE FOR 
CERTAIN CUSTOMERS. THERE'S A CUSTOMERS 
THAT THIS SALES ORDER IS GOING OUT 
FOR. BUT THE SALES ORDER ENTITY 
DOESN'T NECESSARILY SHOW YOU THOSE 
CUSTOMERS. THE CUSTOMERS ARE ACTUALLY 
A SUBENTITY OF SALES ORDERS. THEY'RE 
RELATED, BUT YOU'RE NOT GOING TO 
SEE THEM IF YOU MAKE THE QUERY JUST 
FOR THE SALES ORDERS. IF YOU USE 
EXPAND, YOU CAN SAY, OKAY, I KNOW 
THERE ARE CUSTOMERS FOR THIS. EXPAND 
THIS NAVIGATION PROPERTY AND SHOW 
ME THOSE CUSTOMERS RIGHT IN THE 
QUERY INSTEAD OF HAVING TO MAKE 
A SECOND QUERY AND SAYING FOR THE 
CUSTOMER WHERE THEIR SALES ORDER 
IS EQUAL TO THIS, THEN GET ME ALL 
THE THINGS. YOU CAN USE A SUBQUERY. 
WE DON'T NEED EVERYTHING. WE ONLY 
CARE ABOUT THEIR DISPLAY NAME AND 
THEIR PHONE NUMBER. AND FINALLY 
RELATED TO THAT IS SELECT. THIS 
IS HOW YOU PICK OUT THE SPECIFIC 
PROPERTIES YOU CARE ABOUT INSTEAD 
OF SEEING THE ENTIRE ENTITY. YOU 
DON'T HAVE TO VIEW EVERYTHING, ONLY 
WHAT YOU CARE ABOUT. THE LAST BIG 
ONE PEOPLE ARE INTERESTED IN USUALLY 
IS DEEP INSERT. THIS IS RELATED 
TO EXPAND, WHERE YOU'RE LOOKING 
AT THINGS RELATED TO YOUR ENTITY. 
A DEEP INSERT ALLOWS YOU TO INSERT 
THOSE RELATED ENTITIES ALL IN ONE 
CALL. YOU DON'T HAVE TO CREATE AN 
INVOICE AND THEN CREATE ALL OF THE 
LINE ITEMS AND SEPARATE CALLS. YOU 
CAN INCLUDE THEM ALL RIGHT HERE. 
YOU CAN INCLUDE THE LINE ITEMS ALONG 
WITH THE SALES INVOICE. SO I'LL 
GO BACK TO SHOW YOU A LITTLE BIT 
ABOUT HOW TO DO THAT. SO LET'S SAY 
YOU'VE GOT A LIST OF ALL OF YOUR 
CUSTOMERS HERE. THIS COULD BE A 
VERY, VERY LARGE LIST. IN THIS CASE, 
I THINK THE LIST IS ABOUT SIX PEOPLE. 
SO THIS PERSON DOESN'T HAVE A LOT 
OF CUSTOMERS, BUT THAT'S OKAY. THEY'LL 
GROW. IF IN YOUR APPLICATION YOU 
ONLY WANT TO SHOW A FEW THINGS ABOUT 
A CUSTOMER, YOU DON'T NEED TO SHOW 
YOUR CUSTOMERS -- OR SORRY, YOUR 
USERS THE CURRENCY THAT THEY'RE 
USING THE ADDRESS AND ALL THESE 
KINDS OF THINGS. YOU ONLY WANT TO 
LOOK AT SPECIFIC DATA. THIS IS WHERE 
WE USE THAT SELECT METHOD. IN THIS 
CASE, SAY I JUST WANT TO SHOW AN 
EMAIL FOR THE CUSTOMER AND WHAT 
TYPE THEY'RE IN OR WHAT KIND OF 
CUSTOMER THEY ARE. I USE SELECT. 
I SPECIFY WHICH PROPERTIES ON THE 
CUSTOMER ENTITY I WOULD LIKE TO 
DISPLAY AND I RUN MY QUERY AND I 
GET A MUCH MORE CONCISE LIST. IT 
DOESN'T SHOW ALL THAT STUFF. IT 
JUST SHOWS ME THE EMAIL AND THE 
TYPE FOR EACH CUSTOMER THAT I GET 
BACK. SIMILARLY, IF YOU DON'T CARE 
ABOUT EVERY CUSTOMER IN THE WORLD, 
SAY AGAIN IN YOUR APPLICATION SOMEBODY 
AS A USER HAS DRILLED DOWN TO A 
SPECIFIC CUSTOMER, YOU DON'T NECESSARILY 
WANT TO GO GRAB ALL THE CUSTOMERS. 
YOU ONLY WANT THE SPECIFIC ONE. 
YOU CAN USE THE FILTER OPTION INSIDE 
OF YOUR QUERY. SAY LOOKING FOR A 
DISPLAY NAME WHERE THEIR NAME IS 
EQUAL TO ALPINE SKI HOUSE. IN THIS 
CASE, I ONLY GET BACK ONE CUSTOMER 
AND THAT ONE CUSTOMER'S DISPLAY 
NAME EQUATES TO WHAT I WANTED. WE 
COULD IF WE HAD MULTIPLE CUSTOMERS 
WITH THE SAME DISPLAY NAME OR EMAIL, 
WE WOULD GET BOTH OF THEM BACK IN 
A SINGLE COLLECTION. ALL RIGHT. 
SO THE TRICKIEST ONE IS USUALLY 
THE EXPAND, AS WE TALKED ABOUT BEFORE. 
EXPAND IS WHERE YOU HAVE RELATED 
ENTITIES TO WHAT YOU'RE TRYING TO 
QUERY FOR BUT THEY'RE NOT PART OF 
IT. THEY'RE RELATED BUT YOU WON'T 
SEE THEM IN YOUR QUERY. IN THIS 
CASE, IF WE TAKE A LOOK AT SALES 
INVOICES, WE KNOW THAT THEY HAVE 
LINES ASSOCIATED WITH THEM, WHAT 
ITEMS ARE ASSOCIATED THERE. BUT 
INSIDE OF THIS ENTITY, WE WON'T 
FIND THEM OR SEE THEM. IF WE WANT 
TO DO THAT, WE'LL HAVE TO EXPAND 
THOSE LINES. IF WE USE THE EXPAND 
FUNCTION HERE AND SPECIFY WHAT IT 
IS THAT WE'RE EXPANDING, WE'LL SEE 
THEM DOWN HERE. THESE ARE MY SALES 
INVOICE LINES FOR THIS PARTICULAR 
SALES. IF BY SELECT THE TAX CODE. 
TAX CODE. IF I RUN THIS QUERY, I 
SHOULD SEE MY SALES INVOICE LINES 
AND JUST THE TAX CODE, THAT KIND 
OF STUFF. AND YOU CAN TAKE THAT 
JUST ABOUT AS DEEP AS YOU WOULD 
LIKE. YOU COULD EXPAND WHAT YOU'VE 
ALREADY EXPANDED TO GET ALL SORTS 
OF DATA IN A SINGLE QUERY INSTEAD 
OF HAVING TO GO BACK MULTIPLE TIMES 
AND KEEP GOING DOWN THE TREE. YOU 
CAN FILTER ON THAT EXPAND IF YOU 
WANTED. YOU COULD DO ANYTHING YOU 
WOULD LIKE INSIDE OF HERE. I COULD 
DO A FILTER WHERE IT EQUALS THIS 
OR THE OTHER THING IF THEY WERE 
MULTIPLE SALES LINES FOR THIS ORDER. 
IN THIS CASE, I DON'T THINK, YEAH, 
ONE OF THESE CUSTOMERS HAS MULTIPLE 
ENTRIES, SO THIS ONE. TAX CODE IS 
A BAD CHOICE FOR FILTERING IN THIS 
CASE, BUT WE COULD IF WE WANTED 
TO FOR ANY OF THOSE ITEMS. OKAY. 
THEN I MENTIONED BOUND ACTIONS. 
BOUND ACTIONS ARE METHODS THAT MAKE 
THINGS SIMPLER. SOMETHING THAT YOU 
CAN CALL RIGHT ON THE QUERY TO JUST 
GET SOMETHING DONE WITHOUT HAVING 
TO WORRY ABOUT HOW TO DO IT VIA 
DIFFERENT QUERIES. IN THIS CASE, 
WE TAKE A LOOK AT A SALES QUOTE. 
USUALLY WE LIKE TO TAKE SALES QUOTES 
AND TURN THEM INTO INVOICES. INSTEAD 
OF HAVING TO TAKE YOUR SALES SALES, 
YOU CAN USE A BOUND ACTION JUST 
TO CALL. YOU TARGET THE SALES INVOICE 
AND YOU CALL THE MAKE INVOICE BOUND 
ACTION ON IT AND BUSINESS CENTRAL 
PERFORMS THE ACTION IN THE BACKGROUND 
AND YOU GET A RESPONSE BACK THAT 
TELLS YOU WHAT YOUR NEW SALES INVOICE 
IS GOING TO BE. IT MAKES IT EASIER. 
WE ADDED A WHOLE BUNCH OF THESE 
FOR COMMON SCENARIOS WE KNOW THAT 
PEOPLE ARE GOING TO ENCOUNTER SUCH 
AS THIS. ALL RIGHT. SO WE'RE TAKING 
A DEEP TECHNICAL DIVE, I KNOW, INTO 
HOW DO YOU ACCESS THESE, WHAT DO 
YOU DO WITH THESE. THE NEXT TECHNICAL 
THING THAT WE LOOK AT IS HOW AM 
I GOING TO ACCESS THEM. ALL OF THE 
APIS WILL BE ACCESSED HERE AND THEN 
A VERSION. OUR INITIAL VERSION OF 
OUR API PAGE WAS EXPOSED UNDER BETA. 
THAT'S WHEN WE WERE GETTING STARTED. 
BUT WE HAVE RECENTLY RELEASED VERSION 
1. 0. AND THESE STAY FIXED. THEY 
STAY CONSISTENT. IF WE DECIDE TO 
CHANGE THINGS AND WANT TO ADD NEW 
FEATURES OR REMOVE SOMETHING, WE'LL 
COME OUT WITH 2. 0 SO YOU CAN CONTINUE 
TO USE 1. 0. SOME OF THE CHANGES 
FROM BETA TO 1. 0, IN BETA WE UTILIZED 
MULTIPART KEYS. WE COLLAPSED ALL 
THOSE AND YOU'RE NOW IDENTIFYING 
EVERY ENTITY WITH A SINGLE ITEM. 
IT MAKES THE QUERY A LOT SIMPLER 
AND THE LOGIC AROUND THAT EASIER. 
YOU CAN ALSO NAVIGATE DEEPER. MORE 
ENTITIES HAVE NAVIGATION PROPERTIES 
THAT YOU CAN LOOK UP AND GO DEEP 
INTO A TREE OF ENTITIES AND FIGURE 
OUT MORE DATA AND MORE INTERESTING 
INFO. A WHOLE BUNCH OF EXTRA PROPERTIES 
THAT PEOPLE REQUESTED AND THAT THEY 
WANTED ON THOSE ENTITIES. ALL RIGHT. 
SO, NEXT LET'S TALK A LITTLE BIT 
ABOUT WEB HOOKS AND THE OPEN SPECIFICATION. 
THE WEB HOOKS GIVE YOU THE ABILITY 
TO SUBSCRIBE TO AN EVENT. IT GIVES 
BUSINESS CENTRAL AND YOUR APP AN 
ABILITY TO COMMUNICATE WHEN SOMETHING 
HAPPENS. YOU DON'T NECESSARILY HAVE 
TO KEEP PULLING BUSINESS CENTRAL. 
WE'LL TELL YOU WHEN IT HAPPENS AS 
OPPOSED TO YOU FIGURING OUT WHAT 
HAPPENED. AND BY USING THE SPECIFICATION, 
WE'RE ADHERING TO AN INDUSTRY STANDARD 
WHICH ALLOWS YOU TO USE TOOLS SUCH 
AS SWAGGER TO GO GENERATE A CLIENT 
FOR THIS. YOU DON'T HAVE TO WORRY 
ABOUT WRITING ALL OF THE CODE TO 
ACCESS THINGS. YOU CAN WRITE A CLIENT 
AND USE THAT IN YOUR APPLICATION. 
AND THE BUILDERS FOR THIS INCLUDE 
A WHOLE HOST OF LANGUAGES. IT DOESN'T 
NECESSARILY HAVE TO BE C#. RIGHT. 
SO AS I MENTIONED WEB HOOKS, THEY'RE 
A DYNAMIC WAY OF ALLOWING OUR SERVICE 
AND YOUR SERVICE TO COMMUNICATE. 
WHEN SOMEBODY HAS INSERTED A RECORD 
AND YOU'VE SUBSCRIBED TO THAT EVENT, 
WE'LL SEND YOU A MESSAGE AND YOU 
CAN DO WHATEVER IT IS YOU NEED TO 
DO TO REACT TO THAT. DON'T CALL 
US, WE'LL CALL YOU. SO, ON THE LEFT-HAND 
SIDE OF THE GRAPHIC, THIS WOULD 
BE IF YOU DIDN'T HAVE WEB HOOKS. 
YOU WOULD CONSTANTLY BE COMING INTO 
BUSINESS CENTRAL AND SAYING, HEY, 
WHAT'S CHANGED? AND YOU WOULD HAVE 
TO FIGURE OUT WHAT YOU'RE GOING 
TO DO WITH THAT ANY TIME AN EVENT 
HAPPENS. WITH WEB HOOKS ON THE RIGHT-HAND 
SIDE, WHEN SOMETHING HAPPENS, INSTEAD 
WE JUST TALK TO YOU. WE SEND YOU 
A MESSAGE AND SAY, HEY, THIS JUST 
HAPPENED. SOMETHING CHANGED OR SOMETHING 
WAS DELETED. AND YOU CAN THEN REACT 
TO THAT. I'LL SHOW YOU AN EXAMPLE 
OF THE PAYLOAD, BUT WE TELL YOU 
SPECIFICALLY WHAT ITEM HAS CHANGED 
AND WE'LL TELL YOU WHAT JUST HAPPENED. 
THIS IS ALL HANDLED VIA SUP SUBSCRIPTIONS 
ENTITY. SO ON THE API ROUTE, THERE'S 
A THING CALLED SUBSCRIPTIONS. YOU 
CAN SEE ALL THE SUBSCRIPTIONS THAT 
YOU HAVE OR ARE AVAILABLE. YOU CAN 
POST A NEW SUBSCRIPTION. YOU CAN 
DELETE IT OR UPDATE OR MODIFY WHAT'S 
ALREADY THERE. SO WHEN YOU WANT 
TO NOTIFIED, YOU SUBSCRIBE AND YOU 
POST TO THE SUBSCRIPTION'S ENDPOINT. 
YOU'RE SAYING YOU PROVIDE A SECRET. 
THIS IS SO THAT WHEN WE SEND YOU 
A NOTIFICATION, YOU KNOW IT WAS 
US. MY WEBSITE. SO THIS IS YOUR 
URL THAT YOU'RE EXPOSING TO BUSINESS 
CENTRAL SO WE CAN SEND YOU THE NOTIFICATION 
THAT IS SOMETHING HAS HAPPENED. 
IN THIS CASE, SALES INVOICES. SO 
FOR HERE, SOMEBODY AT THIS NOTIFICATION 
URL WOULD GET MESSAGES ANYTIME SOMEBODY 
HAS MODIFIED THE OF SALES INVOICES 
INSIDE OF THIS COMPANY. THE STUFF 
AT THE BOTTOM ARE WHEN YOU MAKE 
THE INITIAL SUBSCRIPTION. YOU SEND 
OUT YOUR SECRET TO BUSINESS CENTRAL. 
BUSINESS CENTRAL RESPONDS BACK WITH 
A SECRET TO YOU AND YOU HAND THAT 
SECRET BACK TO BUSINESS CENTRAL. 
THIS IS HOW BUSINESS CENTRAL KNOWS 
THAT YOU ACTUALLY SUBSCRIBED. THEN 
WE CAN MOVE FORWARD WITH THE NOTIFICATIONS. 
IF WE DIDN'T RECEIVE THAT RESPONSE 
BACK FROM YOU, THEN WE WOULD THINK 
SOMETHING WENT WRONG AND WE'RE NOT 
GOING TO STARTED EXPANDING THIS 
URL. YOU MIGHT SEE AT THIS FIRST 
ONE SOMETHING HAS BEEN UPDATED. 
THE ITEMS. WHICH ITEM? THAT SPECIFIC 
ID RIGHT THERE, THAT IS THE ID OF 
THE ITEM THAT WAS MODIFIED. IT TELLS 
YOU WHEN IT WAS MODIFIED. AND THAT 
CLIENT'S STATE IS THAT SECRET THAT 
YOU PROVIDED TO US. IN THIS CASE, 
WE PROVIDED A NOT SO SECRET SECRET. 
THAT'S NOT PARTICULARLY UNIQUE BUT 
IF I WAS RECEIVING THIS ON THE OTHER 
END, I WOULD KNOW WHAT IT IS. WE 
ALSO TELL YOU THINGS THAT ARE CREATED. 
AND THE LAST ONE IS COLLECTION. 
THIS MEANS THAT SEVERAL THINGS HAVE 
BEEN MODIFIED INSIDE OF THIS COLLECTION 
OF ITEMS. YOU SUBSCRIBE TO THIS 
AND WE CHANGED A BUNCH OF THINGS 
INSIDE OF ITEMS. MAYBE THIS IS IMPORTANT 
TO YOU BECAUSE YOU NEED TO REACT 
DIFFERENTLY TO IT AS OPPOSED TO 
A SINGLE ITEM AND YOU WOULD LIKE 
TO GROUP THOSE TOGETHER. THAT'S 
IT FOR WEB HOOKS. NOW WE CAN TALK 
A LITTLE BIT ABOUT THE API SPECIFICATION 
3. 0. THIS IS A WAY OF DEFINING 
YOUR APIS THAT'S BEEN STANDARDIZED 
ACROSS THE INDUSTRY. AND IT'S FORMALLY 
KNOWN AS SWAGGER. THE VERY USEFUL 
THING IS THAT YOU CAN ACTUALLY GENERATE 
A CLIENT FOR OUR APIS. YOU DON'T 
NEED TO WORRY ABOUT WRITING YOUR 
OWN CODE OR CLIENT FOR IT. YOU CAN 
IF YOU LIKE, BY ALL MEANS, BUT YOU 
CAN JUST GO OUT HERE AND GENERATE 
A NEW ONE. THIS IS PARTICULARLY 
USEFUL IF YOU WANT TO UPTAKE THE 
NEXT VERSION OF OUR APIS. YOU GO 
HERE, POINT IT AT THE V 2 ENDPOINT 
AND IT GENERATES A CLIENT FOR YOU 
AND YOU START USEING THAT INSIDE 
OF YOUR PRODUCT. WE'LL TOUCH A LITTLE 
BIT ON COMMON DATA MODEL AND MICROSOFT 
GRAPH. IF YOU'RE NOT FAMILIAR WITH 
COMMON DATA MODEL OR THE COMMON 
DATA SERVICES, IT'S A SET OF ENTITY 
KNOWN AND UNDERSTOOD AND MADE COMMON 
ACROSS ALL PRODUCTS. MOST EVERYBODY 
DEALS WITH ANYTHING THAT YOU WOULD 
WANT FOR YOUR VENDORS OR DIMENSION 
LINES OR SALES QUOTES AND INVOICES. 
BUT ALL OF THESE DIFFERENT SERVICES 
TEND TO HAVE SLIGHTLY DIFFERENT 
WAYS. A CUSTOMER COULD HAVE A NAME 
AND A NAME TWO, OR ANYTHING THAT 
YOU COULD THINK OF THAT WOULD BE 
DIFFERENT ACROSS THEM. THE COMMON 
DATA MODEL IS A WAY OF STANDARDIZING 
ALL OF THESE AND SAYING THIS IS 
WHAT A CUSTOMER LOOKS LIKE. IT HAS 
THESE PROPERTIES AND THESE FIELDS. 
WE STAY COMMON ACROSS ALL OF THEM 
AND THIS ALLOWS YOU TO SHARE DATA 
ACROSS ALL OF THESE DIFFERENT SERVICES. 
THEY ALL KNOW WHAT A CUSTOMER LOOKS 
LIKE AND HAVE A COMMON WAY OF DEFINING 
IT, SO WE CAN TRANSFER DATA WITHOUT 
HAVING TO WORRY ABOUT IF A FIELD 
DOESN'T EXIST. THEY PROMOTE THAT 
SHARING AND OPERATIONS ON THOSE 
THINGS THAT ARE COMMON ACROSS ALL 
OF THE APPLICATIONS. SO HOW DOES 
THAT RELATE TO BUSINESS CENTRAL? 
HOW DO WE USE COMMON DATA SERVICES? 
THE SHORT ANSWER IS THAT WE DO NOT 
DIRECTLY, AT LEAST NOT YET. COMMON 
DATA SERVICES ARE NOT INTEGRATED 
INTO BUSINESS CENTRAL STRAIGHT. 
BUT WE PROVIDE SYNCHRONIZATION AND 
INTEGRATION INTO DYNAMICS 365 INTO 
SALES AND SALES IS BUILT ON TOP 
OF CDS AND THE CDM. IF YOU HAVE 
YOUR CONNECT APP, YOU'LL ACTUALLY 
BE DOING IT THROUGH SALES THAT HAVE 
BUSINESS CENTRAL INTEGRATE WITH 
SALES. LET'S TALK A LITTLE BIT ABOUT 
THE GRAPH. IF YOU HAVEN'T EXPLORED 
THE GRAPH, IT'S KIND OF COOL. I 
JUST LEARNED ABOUT IT YESTERDAY. 
JUST KIDDING, IT WAS THE DAY BEFORE. 
THE GRAPH ALLOWS YOU TO GO OUT AND 
ACCESS DATA ABOUT YOUR CUSTOMERS 
AND ABOUT ENTITIES INSIDE OF AZURE 
USING A SINGULAR RESOURCE, A SINGULAR 
WAY OF ACCESS. YOU CAN GET ALL OF 
YOUR DATA FROM BUSINESS CENTRAL, 
OFFICE, JUST WINDOWS 10, YOU CAN 
DO THIS OVER ALL TYPES OF USERS. 
THIS IS AN IMPROVEMENT ON THE OLD 
WAY. THIS CENTRALIZES EVERYTHING 
IN A SINGULAR WAY TO ACCESS IT. 
THERE'S ONE ENDPOINT. YOU USE ONE 
AUTHORIZATION METHOD. YOU'VE GOT 
ONE SET OF DOCS FOR THE WHOLE THING 
AND ONE SDK. YOU DON'T HAVE TO WORRY 
ABOUT BUILDING 15 DIFFERENT CLIENTS. 
YOU CAN COMMUNICATE WITH THIS. THE 
APIS IN THE GRAPH ARE CENTRALIZED 
AND THEY STAY CONSISTENT. JUST LIKE 
WE WERE TALKING ABOUT WHERE WE DON'T 
CHANGE THEM OR IF WE CHANGE THEM 
WE VERSION THEM, THE SAME THING 
IS TRUE INSIDE THE GRAPH. THEY STAY 
CONSISTENT. SO WE CURRENTLY EXPOSE 
EVERYTHING IN THE BETA VERSION OF 
THE GRAPH AND THESE ARE ALL THE 
THINGS THAT WE CURRENTLY EXPOSE. 
YOU CAN GET ALL OF THIS INFORMATION 
ABOUT YOUR FINANCIALS. WE DO ONLY 
SUPPORT THE GRAPH. IT'S A READING 
MECHANISM HERE. BUT YOU CAN ACQUIRE 
ALL OF THESE DIFFERENT THINGS IN 
THE EVENT THAT YOU WOULD LIKE TO 
USE THE GRAPH FOR YOUR APP SERVICE 
OR ALL YOU NEED TO DO IS QUERY INFORMATION. 
THIS IS USEFUL BECAUSE THEN YOU 
DON'T HAVE TO WORRY ABOUT A CHANGE 
AND EVERYTHING. ALL RIGHT. SO, IF 
YOU FOLLOWED ALL OF THIS AND YOU 
WENT OUT AND YOUR DEVELOPED YOUR 
CONNECT APP, YOU NOW HAVE AN INTEGRATION 
WITH BUSINESS CENTRAL, WHAT ARE 
YOU GOING TO DO ABOUT IT AND HOW 
WILL PEOPLE START USING YOUR PRODUCT? 
THAT'S WHERE APP SOURCE COMES IN. 
IT'S A MARKETPLACE FOR APPS THAT 
IS USED ACROSS THE DYNAMICS 365 
SPECTRUM. WE USE IT INSIDE OF OUR 
PRODUCTS, ALSO USE IN FNO AND SALES, 
ALL THESE KINDS OF THINGS. IT'S 
THE PLACE TO PUT YOUR APPS AND CUSTOMIZATIONS 
FOR PEOPLE TO FIND THEM. CONNECT 
APPS HAVE NOW BEEN OPENED UP. YOU 
CAN ADD YOUR CONNECT APP INSIDE 
OF HERE AND DO THINGS WITH IT AND 
PEOPLE CAN SEE IT TO CONNECT WITH 
YOU TO GET ALL OF YOUR STUFF INSTALLED 
AND FIGURE OUT A SOLUTION FOR YOU. 
THEY'RE LISTED IN APP SOURCE AND 
THEY'RE DISCOVERABLE. IF SOMEBODY 
STARTS SEARCHING FOR APPS FOR BUSINESS 
CENTRAL AS A PRODUCT, THEY COULD 
END UP LANDING ON YOUR CONNECTED 
APP AS A SOLUTION FOR WHATEVER THEIR 
PROBLEM MIGHT BE. THIS IS ADVANTAGEOUS 
AS WELL. WE HAVE AN EMBEDDED VIEW 
THAT PEOPLE CAN USE WHEN THEY MOVE 
AROUND IN BUSINESS CENTRAL AND I 
REALLY WISH THERE WAS A WAY TO DO 
THIS PAYROLL THING. SO THEY START 
LOOKING FOR PAYROLL AND THEY'LL 
FIND YOUR CONNECTED APP WITH ALL 
THE INFORMATION THAT YOU'VE PROVIDED 
TO TELL THEM HOW TO GET IT, WHERE 
TO GET IT, WHO YOU ARE AND WHAT 
IT DOES. ADDITIONALLY, WE INTEGRATE 
APP SOURCE INTO OUR SEARCH CAPABILITIES. 
IF SOMEBODY DOESN'T KNOW TO GO TO 
APP SOURCE, IF THEY JUST START SEARCHING 
FOR GENERAL THINGS LIKE PAYROLL 
OR OTHERWISE, THEY'LL SEE THINGS 
FROM APP SOURCE. THE SECTION DOWN 
HERE SHOWS YOU THE SEARCH ITEMS 
TO SHOW YOU RIGHT INTO OUR PRODUCT 
WHEN SOMEBODY SEARCHES. AND WE DO 
HAVE SUCCESS STORIES THAT I LIKE 
TO CALL OUT. THESE ARE ALL CONNECT 
APPS THAT OTHER COMPANIES HAVE ALREADY 
BUILT AND WE HAVE TAKEN ALONG THIS 
PROCESS SO THEY CAN BE SUCCESSFUL 
AND PEOPLE CAN FIND THE CONNECT 
APPS AND USE THEM. THESE ARE ALREADY 
OUT THERE. YOU COULD BE TOO AND 
THEN I CAN PUT YOUR NAME ON ONE 
OF THESE FANCY SLIDES. I ALSO HAVE 
SOME RESOURCES IN THE DECK. AS FAR 
AS THAT GOES, THAT IS EVERYTHING 
I HAVE. IF YOU HAVE QUESTIONS, PLEASE 
FEEL FREE TO COME UP, ASK THEM OR 
ASK THEM IN YOUR SEATS AND WHATNOT. 
OUTSIDE OF THAT, PLEASE EVALUATE 
THE SESSION. IF YOU'RE INTERESTED 
IN THE OTHER THINGS THAT I'VE SHOWN, 
I HAVE SOME SESSIONS. ONE'S RIGHT 
AFTER THIS ONE IN THIS ROOM. THE 
OTHER ONE IS A LITTLE BIT LATER 
BUT ALSO IN THIS ROOM. AND THEN 
THERE'S ANOTHER SESSION ABOUT USING 
EXCEL AND HOW THAT WORKS WITH DYNAMICS 
365. AND EXCEL CAN USE THESE SETS 
OF APIS TO GO GRAB THAT DATA AS 
A CONNECT APP. OUTSIDE OF THAT, 
THANK YOU VERY MUCH FOR COMING. 
I HOPE YOU HAVE A GOOD REST OF THE 
DAY AND MAYBE I'LL SEE YOU LATER 
