 Hi everyone, this is Phil Smith, Business Account Manager at FileMaker, and I'll be your host for today's Fundamentals of Mobile Seat Sinking Web Seminar, where you'll learn the essentials of understanding syncing FileMaker data to and from mobile devices. Our guest speaker today is Matt O'Dell, Technical Marketing Manager at FileMaker, who will be doing today's demonstration. Before we get started, I have some brief housekeeping notes I'd like to review with you. For best experience, we strongly recommend that you participate in the Web Seminar with a broadband connection. If you have any problems or require online assistance at any time, please contact Citrix Technical Support at 888-259-8414. Again that number is 888-259-8414 for Citrix Technical Support. Well, during today's presentation, you'll have an opportunity to type in questions that we'll review at the end of the presentation. Let's talk briefly about how to enter a question. First, just go to the control panel, click on the questions section to reveal the questions area, and enter your question. Then hit send. And again, at the end of the presentation, we'll cover as many questions as time allows. Well, what I'd like to do now is review with you briefly the FileMaker product line. So, on your left here is FileMaker Pro, and FileMaker Pro is the tool that you'll use to both create databases, of course, and consume them, whether they're your own personal things on your desktop or they're hosted on FileMaker Server. FileMaker Pro 12 Advanced next to that is an advanced version where if you're building databases, this is the tool you really want, it's the tool that I use, the tool that Matt's going to be using today, and it allows you to do a lot of important things, and it's a super set of FileMaker Pro. So everything FileMaker Pro is, plus the script debugger, the ability to create custom menus, and much more. Well next to that is FileMaker Server, and I like to think of FileMaker Server as sort of the hub of a FileMaker deployment. This is where you're going to host all of your databases to up to 250 concurrent FileMaker Pro and or FileMaker Go connections. You can have up to 125 databases on a given FileMaker Server and it even allows you to connect to ODBC data sources. And FileMaker Server Advanced is a super set of FileMaker Server, allowing you to have FileMaker Server perform as an ODBC data source and adding FileMaker's instant web publishing capabilities and more. And then on the right, really the reason why we're here today is to talk about FileMaker Go for the iPad and the iPhone. FileMaker Go is a free product on the iTunes Store. You can go download it now and check it out if you don't have it. And the great thing about it is that you can open any FileMaker database that already exists on your device. Matt's going to talk about this in detail, but you can take files on your device or again you can connect to them on FileMaker Server in a shared environment. One of the things that we get asked Fairmount is about syncing FileMaker Go and that's what we're here to talk about today. Well, now I'd like to switch and talk briefly about FileMaker Technical Network. If you're a member of TechNet, that's great. If you're not, I'd ask that you go join. It's a free program that we have that gives you some great information to help you become a better developer of FileMaker databases. You can get tips from experts, collaborate with other like-minded users and developers, share your expertise and follow topics of interest. You even get tech briefs and how-to articles and white papers. Matt's going to reference a couple of these in his presentation today. And you get downloads of hundreds of scripts, calculations and custom functions that you can use to help you become a better developer and enhance your solutions as well as product news updates and even members only web seminars. Well, there's also a FileMaker developer subscription that's $99 a year and add a couple of great and important things for you. One is a FileMaker server advanced developer license. So you can get a full copy of FileMaker server advance. The only limitation is that you can only have three people connect, three machines connected to it at any given time. But you can build and test multi-user solutions without the need for a full version of server. You'll also get a download of the latest official FileMaker training series that we'll talk about a little bit later. And the ability to have an early view of unreleased FileMaker software. Well, now it's my pleasure to introduce Matt O'Dell. Matt's a technical marketing manager at FileMaker and has been an avid FileMaker user and developer for over 10 years. He's a former systems engineer and a certified FileMaker developer, FileMaker authorized trainer and is my SQL developer certified. And now I'd like to turn it over to Matt O'Dell. Thanks, Bill. So today we're going to be covering the fundamentals of mobile thinking. And so for our goals are going to be to cover some of the basic information that you need before you start building your own syncing platform or folding syncing into your own solution. We're going to review some of the different technical areas that you actually have to think about when you're writing your own syncing solution. We're going to discuss some of the questions that you need to ask yourself as well as ask your users while you're actually developing your own syncing solution. And then we're going to talk about different use cases and examples of people that have solved these technical areas and solved their own syncing problems in different ways because there's not really one way to solve everybody's problem. What we're not going to cover today though is a step-by-step guide into how to write your own syncing routine. Luckily we do have a final maker sync guide that again is available on TechNet for free for anybody to download that goes through step-by-step how to write your own syncing material. We're actually going to spend a lot of time today talking about the fundamentals of it and actually there's a lot more information that we probably have time in that sync guide to cover today. So I highly recommend going and downloading that sync guide free from our website. And today we're just going to focus on the overall fundamentals. But to start off with here I really want to give you guys the truth. I don't want to sugarcoat anything for you. Syncing can be an involved process. The key word here is can. There can be a lot of things that you have to think about when you're writing your own syncing routines or putting in syncing into your own solutions. The reason for that is that there are a few different areas that you really have to think about when you're building syncing. I've separated them into five areas. It's a way that I like to think about it. I know other people have separated into other groups. But the way I like to think about it is first you have to create some sort of offline application that stores data that the people can use while they're not on network. You will need some sort of way for that offline solution to connect to the master solution where all of your data is stored. You're going to need some way to choose which data needs to be pushed in both directions. You're going to need to actually move data in both directions once you've chosen it. And then also deal with any sort of conflict resolution that might come up of multiple people changing data in different places. And then lastly, along the way, you're going to have to handle any errors that might come up of people hitting the home button on an iOS device or a flaking network. So these are the five areas in which I like to separate out different ways of thinking about thinking and different ways in which you need to actually develop your own syncing method. Now luckily with FileMaker, we are a platform, a development platform that you can use to build your own syncing tools. And so we have things like local and served file access so I can have offline access of file offline. I have a database backend where I can actually store data. I have scripting and calculations where I can actually script the moving of data from one file to another or calculate when things should be updated. And I can actually wrap security around this as well. And so we have all of the stuff that you need within our platform in order to write your own sync. But really when it comes down to it is I want to make your guys' life easier. I want it to be as easy as possible for you guys. And so the first thing that you need to do is to really spend some time thinking about your use case. Everybody's use case is a little bit different. And then once you think about the use case, you really want to build only what you need and not build too much because that's going to make your life easier. As a former SE, you spend a lot of time with customers and they would ask us questions about, does FileMaker sync? And we would say yes. But the question we would always ask back is, well, what do you mean by syncing? Because what you mean can be different than what somebody else means. So let's actually take two use cases here to illustrate this point. One of them is a bunch of scientists that are gathering data out in the field. So they're going out into the wilderness. They don't have any internet. While they're out in the wilderness, they need to track information and gather information about the flora and fauna that's out there. And then when they are back on a network, they want to be able to push that data to a centralized server. And then all of the reporting and everything else that people are going to use with this is going to happen on that centralized server. Really, the offline is just to gather data. Well, in this use case, it can be handled pretty simply by taking a simple file with maybe only a layout or two and maybe only a few scripts and emailing that file with no records in it to all of the mobile users. And then those mobile users on iOS devices can add new records to that very simple file. When they're done and they're back online, they can actually directly from within FileMaker email that file to that centralized person that's going to handle everything. And then the central person with a copy of FileMaker Pro on their computer can actually manually import all of those records. So this is one use case. We've actually seen people do this. Another use case is something like having shared offline contacts across an entire company. So let's say I wanted to have a bunch of contacts, a CRM system that grows across my entire company and I want all of my salespeople that are out in the field, all 40 or 60 or 100 of them, to have offline access to all of those contacts. I want those users to also be able to update all of the data that are in those contacts. And I want to be able to push and pull the most up-to-date information whenever I want. So with this use case, there's a lot more that I have to think about. I probably can do something like create a contact file with no data in it. I could probably have the person download that file and then on first open, it goes and connects to my master and downloads all of the data. I can have, you know, whenever the user wants to have that offline system go and connect back to the master and update and pull down any data that's new on the master as well as update new data on the server. But then I also have to do things like planning for conflicts, what happens if I change a record and then Phil also changes that same record. And so what happens in those cases? And then I also need to be able to deal with any sort of dropped connections because I'm using FinalMaker Go to do all of the work. If I'm on a Wi-Fi or if I'm on 3G, there's the possibility of a plate connection or someone hitting the home button. So these two use cases are completely different from one another, but both of them are about thinking, thinking of data. And so if you actually take them and put them on a continuum, that data gathering example probably sits somewhere on the simple side. Pretty simple, I don't really have to do a whole lot of work there. Where that shared context example is probably further, it's more on the hard side. It's so much more difficult. And the fun part is your scenario is probably somewhere in the middle here. Most people that I've dealt with and worked with are somewhere in the middle here. They have something that is a little bit unique and it's not one or the other. And this is why your best bet is to really sit down and ask questions to plan out your use case to really understand what do you need and what makes the most sense for your company and your solution. And then also what's gonna be handy for you is to spend some time understanding which scenarios mean less work for you as a developer. And of course, if there's less work for you, that means that it's easier for you when you're spending less time. So what I want you guys to be able to do is at the end of this is to walk away with some of the use case information that you need and understanding which scenarios mean less work so that you can build the sync tool that's right for you and do it as quickly as possible. So from here on out, I'm gonna go through these five different areas. I'm going to talk about what they mean. I'm gonna talk about some questions that you might wanna ask yourself. And then I'll even give some use cases of different people that have solved these in different ways. So first, we're gonna start off with this idea of creating an offline application and having some sort of offline data storage. So to create this, when we talk about this actually, a lot of times when people say syncing, what they really mean is some sort of partial occasional offline support. Users occasionally need to be offline and I still want them to have access to my data. And so you'll actually see these phrases kind of used interchangeably. Doesn't necessarily mean they mean the same thing, but that's when, you know, since I'm doing this and I'm calling it syncing, really what I mean is some sort of occasional offline support. But before we really get into that, it's really handy for you to understand a little bit more about how FileMaker accesses FileMaker files and the deployment methods there. And so we actually have another guide, the iOS Deployment Simplified Guide. That's also on TechNet. If you go to actually, if you go into TechNet, there's a link at the top that says iOS Resources. Both of these guides are right there for you, so feel free to go there and look them up. But this covers this in a little bit more detail, but let me give you some examples of what I mean. There are two ways that a FileMaker go or even proc solution can connect to a file and use a FileMaker solution. One of them is in a completely offline capability here. I have some sort of file. It sits standalone on my device and I'm the only person that's using it. I don't need any sort of network to access it. I'm using it completely offline and I'm not sharing it with anybody else. I can get that file on the device using methods of iTunes. I can put it up on like a web server and have them access it via Safari. Or I can even email them a file and have a copy of this file directly to FileMaker go and then they would have that copy sitting in FileMaker go. This is similar to some apps that you've probably actually seen or have on your iOS devices already. For example, the clock app or the calculator app or even I used to live in New York City. I had a bunch of a subway map app that I needed to have access to when I'm offline. They would be able to tell me how to get from point A to point B. Those things needed no network at all to work and I didn't have to share with anybody else. You would think of them almost as a reference type app. And you can do this with FileMaker. Actually we've done this with things like DevCon to go when if you go to our FileMaker developers conference we give you a FileMaker file that you can put in FileMaker go or access via FileMaker Pro that's local to you that gives you all of the sessions that are happening in all of the speakers. This is one way that you can access FileMaker files. The other way that you can access them is in some sort of always connected way. So I have a file that's sitting on FileMaker server and then with FileMaker go or even FileMaker Pro I can connect to this file. I need a network connection in order to do it but in that case you actually get all of the updated information. I get record blocking for free. All of this stuff just happens automatically if I am connected in this always connected way. Now when we talk about syncing really we're talking about this occasionally connected method which is I have a file that is local to my device but I also have a file that's sitting on a server. And the fun thing is that really it's just the combination of the other two scenarios. I do actually have the completely offline file that's local and I have a hosted file. And then what I have is basically some sort of scripting or process that when I do have some sort of internet connection the user can start it and it will go and actually sync data between this offline local file and my hosted served file. That's the concept. That's really all that it is when you need occasional connections or the occasional offline support. So when we talk about this one question we get a lot is do I need a server? Well you don't necessarily need a server but it's incredibly helpful. If you actually look at any syncing solution that's out there whether that's iCloud or OmniSync or OmniGraphil and OmniOutliner they also have a lot of syncing tools that are available for you or things like Dropbox. Any sort of thing that syncs data between two different places has some sort of server component and that server is hosting that master database. That master of all of the data that is kind of the data of record as being sitting on that server. And so in this case having something like FileMaker server that's always running that's always in the same place is incredibly helpful for you and saves you a lot of time and a lot of energy. If you just had a copy of FileMaker Pro and you're trying to sync two local files together it's difficult for them to know where each other is because either of those computers could move at any point in time. So if you do wanna go with the server you can obviously buy a copy of server yourself or there's a lot of different hosting companies that are out there feel free to check them out and use one of those and rent a server or rent just a space so you can put your file up there and it'll actually save you a lot of time and in terms of developing your own system. But back before all of this the real most important question of this whole area that you need to ask yourself is do you really need to be offline? Because if you, you might say well yeah it's really handy if I have offline because that's 10% of my time I'm offline or you know it's really handy for me when I'm on the airplane doing something these days. But really if you look at it if you use the always connected model that we talked about before where I'm just connecting it when I have network FileMaker server handles the connection between the device and the server for you. It handles which data the user needs. It will download the data that the user's asking for. It handles conflict resolution if we have built-in record locking. It handles air handling for you. So all of that stuff happens automatically if you just use an always connected model. And so the amount of time when we go through the rest of this session you know the amount of time and effort that you might have to put in is it really worth it if you can just say well we're just gonna be always connected and that's okay with us. You know some apps do that. Some apps like Facebook on your device or Google Maps. A lot of those things are always connected. I need to have a network connection for those to work. Otherwise they don't. It's okay, people are used to that. So when it comes to creating this offline solution and dealing with data storage know that FileMaker can access both hosted files as well as local files. And when you ask for this occasional offline support you're really combining these two techniques of having hosted files and local files. And then really spend the time to think about do you really need to be offline is it really worth it? Because otherwise if you don't feel that it's worth it you're gonna save yourself a lot of time. Next, connecting the offline to master. So the idea behind this is that when I do have an offline solution that's sitting local to my device and I have a master file I'm gonna have to do some sort of I wanna have to have some sort of way of these two things connecting to one another. Now as I mentioned a little bit before it's much easier for an offline file to connect to a master served solution. The reason for this is almost obvious but maybe not completely that offline files can move. If I'm on an iOS device and I move from place to place to place my network address changes everywhere I go I'm on different networks you never know what's gonna be available. Where a master if I'm using it on something like FileMaker server it's always in the same place and it always has the same IP address and I always know where it's going to be. So this is really helpful when it comes to making this connection between an offline file and a master file. Luckily in FileMaker a local file can actually have what we call file references or external data source references to a served file. I can actually have this connection between the two pretty easily. But the quality of the connection that you have the quality of your network really does affect areas of how much data you can sync as well as any sort of air handling you might have to build in. So all of these areas kind of tie in together slightly and so if you have a slow connection you're not gonna be wanting to sync a lot of data and if you have a network that's prone to be very flaky I used to ride the Amtrak a lot in New York and down the northeast corridor there and my wifi would go out all the time I probably wouldn't wanna do a sync in the middle of that because I would really need to build in some nice air handling in order to deal with a dropped connection. So the question that you're gonna wanna ask in this case is where are your users connecting and what is the network like in those places? Can you actually ask them to do it in specific places where you know the network is better because that could save you some time? And then start to ask questions about how much data is being transferred between this offline file and the served file and start to ask about how often do they need to update the offline file? How often are they pulling this data offline? And we're gonna start to answer some of these questions a little bit later in the session but all of these things really play together nicely when you decide what you wanna do and how you wanna connect. So there are two options here actually for doing this. One is to actually just send the file to FileMaker Pro and then let FileMaker Pro do all of the work. This happens a lot. I gave you the example before of the scientist example where if I do it in FileMaker Pro, FileMaker Pro most of the time on my laptop or my desktop has a wired connection or has a really good wireless connection. And so I know it's always gonna stay on. I know I can put it in the background and it's just gonna keep running and it's gonna be fine. But with FileMaker Go, I could be on 3G, I could be on LTE, I could hit the home button at any time and cancel the process. And so running it from something like FileMaker Go actually saves you a lot of time, saves you a lot of hassle. Or you can decide to do it from a mobile device but then you'll have to sync the whole thing yourself. So here's actually one use case of someone that's actually used the first one. You've probably seen this, we've done case studies on this, they've actually done their own webinars at the Berkeley College of Music does auditions for their music school and the people that are giving the auditions go out on the road. Before they go out on the road, they actually download a complete version of their database to their device. They take notes in that offline database on their device and then when they're done, they just email it back to a central person and that admin will go and import any of the data they changed directly back into the master system. So in this case, we've gotten completely around having to deal with this connection between offline and online because they're just emailing the files and emailing is much, you know that all of that data is gonna eventually get there. The email completely goes through or doesn't go through at all. So it saves you a lot of time and effort there. So dealing with the connection between offline and master, know that offline is probably gonna always connect to the master and not vice versa. Offline files can use file references or what we call external data sources and file maker to connect to a master, which is really handy. And letting pro do the work can actually save you a lot of development time. So if that works for you, works for your scenario, then I'd say do that because it's gonna save you a lot of time and effort. Next, choosing data to sync. So in this case, there are really two options and how to actually choose the data to sync. You can actually decide to sync all data. Maybe you want them to have the entire solution completely offline. But the problems with this are things like the amount of time and performance that it takes to actually do that sync. And so obviously the longer it takes, the slower performance is and that can affect user experience. The longer it takes, the longer the users just wanna say, is this over with? Is this over with? Get impatient and not be so happy with your product. So in most cases, you're probably gonna go with the second option, which is syncing some sort of subset of your data. Really, because if you're syncing less data, it's gonna be faster and you're gonna have happier users the faster your sync is. So there are two different ways to really think about subsets. One of them is to really think about what are the tasks that these people are doing offline? What are the specific things that they're doing? And look at the specific tables and fields and even specific records that they need in order to complete those tasks and only sync those back and forth. The less and the less you can sync, the less you have to pass over the wire the faster your performance is gonna be. The other is to, once you've done maybe your first sync, to only sync data that's changed. And so to go through and look at what records have been updated, what records are new, and really only update those records and not try to update your entire found set, which could save you a lot of time. I put deleted records in here, which is a little bit more difficult when you're choosing which data to sync because if you delete a record offline, how can you find that record later to say, okay, now delete that on the hosted file as well? You don't really know. So you gotta do something where you literally log deletes using custom menus or other ways, other techniques in order to log that a delete happened or even just mark a record for deletion but not actually delete it. And then when you do the sync process, go through and actually delete it. So there's a few ways of doing that. So the questions that you're gonna wanna ask here are what tasks are these users really performing offline? What do they really need to do when they're in this occasional offline mode? And then what data do you need to give them in order to perform those tasks? And then start to ask yourself questions about what data is being updated and where is it being updated? Are we updating a lot of data on the server? Are we updating data on local on the device? Are we updating it in both? Which data is being updated? Because when you're choosing, then you can start writing, as you're writing your sync routine, you can say, okay, well, I know this data gets updated on the server, so that's the stuff I'm gonna look for to download to my offline device. Here's the stuff that's changed on my device. So that's the stuff that I need to upload back up. So really start to think about where is data being updated? So another use case that did this in an interesting way is a promotion company. This is actually PMD Promotions. Again, another case study that we have, customer success, sorry. And they have a bunch of street team members that go and put up posters in bodegas and cafes and other businesses around major metropolitan areas. And each basically, actually, there's a set of routes and a route has a bunch of places that are assigned to it. And then each member is assigned a specific route, but their entire system has 20 or 30 tables, a lot of information about all of their customers and all of the projects that they're working on and all of the artwork and everything else is all stored in this massive database. But for this specific use case, these street team members only need the locations on the route that they're assigned to and the map for that specific route so that they can have that offline of using iPod touches in this case. And so they are only downloading those specific records in those specific tables. When they're out going around putting up posters, they need to take pictures. And so they're creating new records specifically for the pictures that they're taking and assigning them to these locations and the projects that they're working on. And then when they're done, they just upload the pictures. And so in this case, I'm downloading locations and offline maps and I'm uploading pictures. So it makes it really simple to think about what is the stuff, what do I need to choose in order to push one way or the other. I can make that decision really easily because I'm only downloading the information that's necessary to complete that task. So when it comes to choosing data to sync, obviously thinking less data is gonna have a faster performance for you. So you're gonna wanna really think about what makes sense there. You're gonna wanna decide what's absolutely necessary for this occasional offline user. What do they really need? What are they gonna be doing when they're offline? So next, once I have chosen which data I wanna sync, I'm gonna actually need to move that data from my offline to online or my hosted back. So in the moving of data, we have a few different ways of doing this. I can actually manually import data using FileMaker Pro. I gave that example before of people using FileMaker Pro to just actually manually import the data. That's one option. And obviously I don't have to do any sort of scripting there. So that's pretty quick and easy. But I can script it. We have the ability to do this. I have obviously the import records script step. I have the ability to do finds. I have the ability to create relationships. I have the ability to loop and set fields and create records and delete records. All of that stuff is available to me via script. And so you can script the copying of data from one file to another depending upon what makes sense for you. But the real problem with moving data is dealing with what we call conflict resolution. The idea behind conflict resolution is if two people are editing the same record at the same time, well, if they're both offline or even one's on the server and one's offline, when that sync happens, who wins? Whose record is more important than Heather? Who is more right than the other? And so this is a big problem with any sort of syncing platform. Now this is obviously easier if you have a single user system. If there's only one person using the system, like things like iCloud or even some of the Omni sync server stuff that they have, you know, it's really simple. If I only have one user, then conflict doesn't really happen as much. And if it does, there's only one person I can ask that person because they're the only person that's updating that stuff. So you'll see techniques and you'll hear techniques like the last one in wins. So you'll probably actually hear the phrase last one in. And that's what they mean. Basically, the last person to update this record is the person that wins. And that record is more important or more correct than somebody else's. Or you can have techniques like user decided. You might have seen this if you're syncing contacts in iCloud and you accidentally do something and get a new Mac. And it says, hey, your Mac has, you know, all of these contacts here and I have contacts in the cloud. Which one are right and you get to choose, right? So you let the user decide. But really at the end of the day with a multi-user system, if I have a bunch of people all using the system at the same time, who should make that decision? Should it be a script? Should I be the one to make that decision as my developer? Or should the user make that decision? And really there's no great answer in this. Either one could possibly run into a problem. Either of them could run into a problem where the script overwrites data that it didn't mean to or the user decides, you know, can the user really make a good choice if they didn't know what that other person updated? Some things to think about. So really the best way to deal with conflict resolution is to avoid conflict. I know that's very pacifist sounding, but it's true. To avoid conflict altogether is the way to deal with conflict resolution. So the ways to avoid conflict are to not let multiple people edit the same data. Also you can allow mobile users to only add records. In that case, if mobile users are only adding records, that record is unique to them and no one else is trying to edit that record until it's been synced. So you're only letting them add records, it's fine. You'll also hear things like check in and check out. And so I check out a record from my hosted server. It flags it to let people know that someone's currently working on this. And then when I sync back up, it checks it back and removes that flag and how people can start using it. So these are all different ways to avoid conflict. Any way that you can avoid conflict is going to make your life easier. So the questions that you can ask yourself are what data do users need to change when they're offline? If I can keep them from changing data when they're offline, then I'm not gonna have to deal with any sort of conflicts at all, right? If also what data is changing on the master? So I know, okay, this data is being changed over there. So is there a possibility that there will be a conflict? And do our updates need to happen transactionally? We'll actually get into this idea of transactions in a little bit, but that basically means when I'm doing one of these updates, does it all need to happen or does none of it need to happen? At any given point in time. So I have two flavors of the similar work case here. I don't actually have a specific company for this, but I've seen a lot of people that have done this. And the idea is that I have some sort of field workers that are going and doing work orders. They're actually working on specific work orders. And so they download to their offline version the specific work orders that they have to do on that day. And then in that offline file, they can only edit fields that are specific to the work that they're doing in the field. So maybe the work order has a date and a customer and a time that they're supposed to be there and notes about what they're supposed to do, but they are editing completely separate data. Is this done? Here's a signature from the person that I did the work for. Here's my notes of what I've done. And so I'm not editing fields that I've downloaded from the server, but I'm editing a completely different set of fields. In this case, I don't have to worry about any conflicts whatsoever. I just update the field that I update offline and I'm in great shape. This is one flavor and we've seen this in a few different places. Another flavor of this exact same use case though, is that when the user downloads the record offline, they actually set a flag in the master system in my hosted system that checks it out and says this record is currently being worked on offline and we have privileges and security set up in FileMaker so that nobody else can change that record in the hosted solution until that person checks back in. And then once the person works on their work order during the day, they sync at the end of the day to say that it's done. It'll go and remove that lock on the hosted file and everything resumes back to normal. People can edit that file. So two different ways of doing the same kind of concept of check in, check out. And avoiding conflict. So data moving in conclusion here, data moving can happen by importing or looping and editing records. Both of those are options for moving data. But dealing with conflict resolution is never fun and it's something that I'd say if you can, avoid it. That's gonna save you the most amount of time is to avoid any sort of conflict if you can. The last area here is handling errors. So handling errors actually goes across the entire set of all of these things we've done. At any point in time, you can run into an error. And so what do you do when that happens? One type of error that we see a lot, especially with mobile devices, as I've talked about before, is dealing with a syncing process that's been aborted. It's stopped in the middle because either my mobile network is flaky and it shuts down and I lose my network connectivity or if I'm on an iOS device at any point in time, I can hit the home button and it will stop the script from running. What happens in those cases? Is that okay? How do I deal with that? Another way to deal with error or another type of error handling that you might have to deal with is that because a served file has record locking built into FileMaker server, what happens if while my sync process is running, it tries to update a record that's currently locked on the server because somebody else is updating it at that exact point in time? What happens in that case? How do I deal with that record lock? And then obviously the larger your sync process is the more of this error handling you're gonna have to think about. The more of these things you're gonna have to really build into your system to deal with. So I mentioned this before, but a lot of error handling gets back to this idea of transactions or transactionally moving data from one place to another. The simplistic way of viewing this is basically either everything that I want to happen happens or none of it happens. And so if I'm doing a bunch of work and my connection drops in the middle, all of that work I've done up until a certain point gets thrown away, nothing's happened. So or if my connection doesn't drop and I get to the end, then at that point in time, all of the changes I've made happen. And I know that they happen at that point in time. That's the idea of a very simplistic way of dealing with this idea of transactions and how do I deal with transactions in terms of syncing data from one to the next? There are a few techniques out there. Tom Geist from Geist Interactive came up with a portal technique using portals, basically the ideas there being that if I'm updating records in a portal, until I commit the master record, I'm looking at all of those records in the portal won't commit or they'll all commit at the same time, basically. And so if I'm updating a bunch of records in one portal, if I drop my connection or something else happens, all of them will be thrown away until I commit that record. So it's pretty handy and a lot of people have been using it, especially if you need transactions. Another way of doing it is dealing with some sort of secondary processing file that has a log of changes that I've made. And actually the use case I have here is back to that promotion company. And this is kind of a simplest way of looking at one of the things that they've done. The developer was Colibri Solutions out in New York. They actually built a separate file that sits on their server, immediately next to their main file, their master file, it has a processing file. And whenever they do one of their syncing processes and push data back up to the server that needs to go on the master, what happens is they log the process by creating a log record. And they say, this process is started and that log record gets an ID. And then when they start pushing new records up to the server to say, okay, here's these images that I've taken, it checks into each of those images. This is the log process, the process log that I'm attaching these to. And then when the whole process is done, it basically logs and says the process is finished. This process is done. And then I have a server-side script that's actually going through and checking for these log records, say which one's it finished? Okay, this one's finished. Okay, now let me go and go through all of the records that's been assigned to that process log and update those on the master, because I know I'm not gonna lose connection. My air handling is, I have less to worry about in that case. So this is a way of doing this kind of, similar to transactionally, but really just dealing with, okay, you know what, either everything happens and gets folded into the master or none of it happens. And this processing file gives you a way of doing that. So when it comes to air handling, if you're on a mobile device, you're gonna need to be prepared for dealing with a boarded safety routines. It's gonna happen. You're gonna have to live with it. And if you want all of your data to be pushed or none of your data to be pushed, you're gonna need to develop some sort of transactional method for pushing of data and getting that data to flow into your master system. Otherwise, there's a possibility of, you know, only 10 records getting in of the 20 that you need to update and then you report your connection and those 10 records got in, but the other 10 didn't. You're really gonna need to think about that. So those are the five areas of thinking. And you can see there's a lot of different kinds of ins and outs and different ways of handling each of these problems in different ways. And it really does come down, it comes back to your use case. And so with each of these, you can do less work by thinking through your use case and saying, well, I'll do this instead of that and it'll save me some time. But there are other ways to save time as well. You know, up until this point, I've been talking about this idea of rolling your own sink and writing your own sink method. You don't necessarily have to do that, right? Because there are a set of tools that are out there that a lot of third-party companies have already put together to help you out in this case. I have four here. I'm only gonna really spend a good amount of time talking about two of them. But all four of these are great sinking products. We have mirror sinks by 360 works. There's go-to-sink by Seed Code and Geist Interactive, I mentioned top guys before. We have sink deck to go from linear blue. And we have REST FM sink, which is built on top of the REST FM platform that they recently came out with. And that's kind of the newcomer. And they got a lot of great things that they're working on. I wanna spend a little time talking about mirror sink. I'm gonna get back to these other two in a second. But even within the tools, they go out to try to solve sinking in different ways. So mirror sink, again, made by 360 works, is really based upon this idea that when you're in this offline state, you wanna have the exact same solution that you have online. It's the same layout, the same script, the same data, the same everything. And so they've actually built a process where you fold in their scripts, the table occurrences that they need, the different things that they need. You put it up on a server and you take a copy of it that you give around to people to use offline. And then they write all of the scripts that you need to actually sync data back and forth so that you have all of the most up-to-date data for your entire solution. They also have a built-in conflict resolution interface so that if you do have conflict resolutions, they'll let the user decide. And you can also do a few certain things there as well of giving them rules for how to deal with conflict resolution. This type of solution is really great for someone that wants to have their full solution with offline support, maybe only a few users. And it's also great for newcomers because they've actually done a really great job of making this easy to fold into their product. So if you want everything, this is a great thing for you. I will say it's a little, it's not very flexible, right? It really only does a few things, but it does those few things really, really, really well. And so it takes care of all of your offline application sorts. It lets you use your current system and just brings it offline. It allows you to connect your offline to master really easily. It has the scripts to do that. It syncs all of the data for you. You do have some control over what data you want to sync, but in default, it just pulls things all of your data. And it does all of the moving of data and deals with conflict resolution or can give you an interface to deal with it yourself. And it also handles all of the errors but it's non-transactional. So this is a great product for kind of the new person that's new to syncing. They want to fold it in. Meersync's done a great job of that. Another one is GoZinc, which is done by Skeet Code and Geist Interactive. And hey, this is more of a developer tool to really provide you with the tools that you need to connect and disconnect from your server seamlessly and easily. They move all of their data using transactional methods. You measure that everything goes or nothing goes. And they have some great methods for downloading and updating that local application that you use. Not just updating the data, but the entire application itself. They do a great job of that. But they don't do conflict resolution by default. There are a few ways that you can build in conflict resolution, but you're mostly in charge of that as a developer yourself. And you're the one that's also choosing which subsets of data go. And this is great for that field work, for example. Where I'm only updating certain records. I don't need certain records out of the field. I need to transactionally upload those in both directions and I can do that really easily with GoZinc. And so in this case, you create the offline file, but it helps you deal with downloading and updating that application really easily. It had all of the scripts to connect again from offline to master really easily. You are in charge of choosing which data. It's synced between the two devices. It will move the data, but you're gonna have to deal with conflict resolution. And lastly, it handles errors and disconnects, but it does move all of your data transactionally, which is really handy. And when I'm talking to John and Dolar and Todd Geith here, they really say, you know what? They agree with this idea of avoiding conflict is key here. And so building in conflict resolution wasn't really a big goal of theirs because you know what? If you can have a system that doesn't need any sort of conflict, this gives you all of the tools that you need. And this does a great job of that. SyncDec2Go is built upon the SyncDec platform that's been around for years. This is the new version that works specifically on mobile as well. And REST FM is doing a lot of great things, very similar to Mirror Sync and how it's trying to sync all of your data, but you do get some choices. I will say both SyncDec and REST FM give you a lot of kind of fine grained tools in how you want to do it. They're very big developer tools that if you want to really roll your, or put in sync, but do it in specific ways, you can do that really easily with both of those tools. But you have a lot of flexibility there. So in conclusion, I'd like you guys to do though, is really go home and spend some time thinking about what your use case is. And think about how can I make my life easier in building and not just, you know, automatically thinking, well, I'm gonna sync all data. Think back and say, what data do you really need to sync? And then make your life easier, build less, and use the tools that are available to you on the market so that you don't have to build it all yourself. So we got about, I think, about 10 or 12 minutes left here. So we're going to start the Q&A section in a moment. But before we do, I'm gonna bring up this last slide here of other resources for you. We'll leave this up so you guys can copy some of these links. Highly recommend joining FileMaker Technical Network. It's free to join. Go to FileMaker.com slash TechNet to get all of the information that you need there. Our sync guide is on TechNet right there at that link. So feel free to go there if you wanna roll your own sync and you wanna learn all of the ins and outs of how syncing works, go into this guide and it'll give you all of the information that you need. If you're interested in dating to FileMaker 12, we have a lot of great things there as well as FileMaker Go being free with FileMaker 12. So feel free to call our sales department at 800-725-2747 if you're in North America or go to FileMaker.com slash INTL if you're looking for one of our worldwide offices. And again, we're gonna have more web seminars similar to this coming in the future. And as well as this web seminar will be recorded and posted. So if you wanna come back, if you missed a specific piece or you had to sign off early or anything, actually had to sign off early, you're not listening right now, but that's okay. Go to this FileMaker.com slash support slash webinars and you'll be able to download this webinar as well as many other webinars that we've done in order to listen to them later. So at that point, we're gonna hop into Q&A and I'm gonna pass it back over to Phil. Thanks very much, Matt. So we've got a number of great questions here. We'll try and take as many as we can. Matt, a couple of, I'm gonna take the first one and actually one person asked, and this is my fault for not setting it up in the beginning, does FileMaker Pro need to be on OSX to create an iOS app? And so the answer to that is actually no. One of the things I didn't point out that I probably should have at the beginning on that product side is that FileMaker Pro and server and their dance counterparts are available for both Mac and Windows. When you buy the program, you get both installers so you can deploy on whichever platform you want. And really for the most part, they're identical. So everything that you can do in the Mac version, you can do in the Windows version, you're just creating a FileMaker file, .fmp12 file, and that's the common thing between FileMaker Pro on both platforms as well as Go. Just a little bit of clarity there. And while we're on the topic of Pro, Matt, can you talk briefly about whether these syncing techniques apply to Pro as well as Go? Great, yeah, actually, I hope I mentioned that before, but I'll clarify it here, which is that that's one of the great things with this is that if you need some sort of offline support, any of the stuff I talked about about local file access and server files and having the two things talk to one another, that can happen with FileMaker Pro as well on a Mac or Windows machine. So obviously in those cases, your network is probably gonna be a little bit better. You don't have to worry about a lot of the same things. You can still do all of the same techniques of having an offline file that exists on your laptop or your desktop and then having that syncing every now and again back to a server file. So yes, all of the stuff I talked about here is completely applicable in both cases. Thanks Matt. There was a question here also about, this is on a slightly more general topic, but finding tips on connecting FileMaker's server from outside our local area networks. Again, we're just talking about some basics in server setup here. Can you just comment on where to find that information? Sure, so actually that all comes down to networking which is always fun if you've never done networking before. Remember the first time I set up a router and had to set up port forwarding, it wasn't very much fun. If you're deciding to install FileMaker server yourself and you're kind of in charge of your network or you have someone that's in charge of your network, you're gonna need to do some work in order to open ports and set up things like port forwarding. And we have all of that information about what ports needed to be open are all in our FileMaker server getting started guide. Comes directly with FileMaker server. You can actually find it on our website if you just search for server getting started. And it has all of the ports that are necessary depending upon how you install it, what you need access to. And so really in that case, it's just setting up your network properly and turning on the right ports and setting up security properly and all of that is in our getting started guide. Thanks so much, Matt. Can FileMaker Go detect when a network is available and then perform a sync script without any user interaction? Kind of, but not exactly. You will need to have FileMaker Go up and in the forefront in order to do any of this. There are ways that you can check to see if there's a network available using things like insert from URL or using a web viewer or something just to check to see if the network on is it available. So there's a few different techniques for that in order to check. If you wanted to do it every so often, you would use what we call an install on timer script up. And that basically is a script trigger that you can set to basically say run every minute or run every 30 seconds or every five minutes. And then that script will run and then you can in that script use one of these methods to check to see if there are internet. And I get internet right now. And then there is go and try to run a sync routine and see if it can connect to the server. So I think that's your best bet for that is can you do that? Yes, you just need a few different techniques there. I'd say use a mixture of something like insert from URL or a web viewer to check to see if I have an internet as well as an install on timer script up. Those two things can play together to have it run automatically and then check to see if there's an internet connection. Excellent. Thanks so much. You know, I'll take this one. It's a little bit related here. It can't file make or go connect to an ODBC data source that's not hosted on FileMaker like my SQL. So this is a great question. And while it's not a sync question, it does speak to one of those scenarios where you might avoid syncing altogether. So if you have FileMaker server connected through ODBC to a source like MySQL or SQL server, you can see those related records from that MySQL table in this case in FileMaker Pro or FileMaker go for that matter if you're connected to that database on a server. Yeah, but from the point in that question that I think I was gathering from it, you will need it to be on server because with ESS and other things we need ODBC and Apple doesn't give us any sort of ODBC interface on iOS. So you're limited to actually doing ODBC on some sort of computer. So you need use FileMaker server or FileMaker Pro in order to do that ESS connection. Matt, is there a way to send an entire FileMaker database from the client without using iTunes to download the FileMaker database? I'm not sure if I get that question exactly, but I'll try to answer it as best as I can. So you can email File, if you have the file with all of the data in it, obviously the larger the file is, the more that's going to bulk up an email. But any FileMaker file that you have, you can send it via email. You can use web servers in order to have them access via Safari. You can even use some tools like Dropbox in order to have them access the file and copy it directly to their device. It won't update back in Dropbox after they've copied it to device, but you'll be able to get access to it to pull it down. And even there are ways within FileMaker that if you have a FileMaker file hosted on a server, you can actually take a version of that file that you stored in a container and actually download it directly to the device. And that's the technique that some of these syncing tools will give you like SyncDec, SyncDec to go, as well as GoZinc. They're using this method. So if you actually have a server file and then you create an offline copy of it, maybe create a backup of it and then store it in a container, if someone accesses the server file, you can have a process that runs and actually downloads a copy of it locally to their device. So there are some options for you there too. Great, thanks so much. So we've covered a lot about server, you know, is there a sample file showing Sync that folks can download? I guess I, you know, I'm not sure if there's something on our website, but maybe a seat code for theirs or 360Works for MirrorSync. I think that some of them do have some demos and I would go and check some of those tools to see if they do. We don't specifically have one ourselves again because it's difficult for us to give a tool or an example that is gonna be a one-size-fits-all because as I mentioned here, everybody's syncing issue is gonna be different than somebody else's. So we don't have one specifically. I know that the Sync guide goes into detail about a specific example. I can't remember if it actually has a file that goes with it or not, but I think if you search with some of the tools that are available, they will give you some examples. Hey Matt, we've gotten several questions here about using external data storage things like Dropbox, for instance. So here's one question. It says if you have a FileMaker Pro on a laptop and FileMaker go on an iPad and you don't have FileMaker Server but are hosting the FileMaker database on Dropbox, how does this syncing work in terms of records being changed on the iPad? So I think there's subtlety there about what we mean by hosting. Yeah, great point, thanks for bringing that up. That actually, yes, the idea of hosting there is a little bit different. That's kind of file sharing almost is what Dropbox give you. It doesn't really give you a hosting. So when we say hosting, we're actually talking about FileMaker Server hosting. We're a FileMaker server is the one that writing files back and forth where if I'm using things like Dropbox, all that's doing is just if I update a file here and then I update a file there, it's just going to upload the file and again, last in wins. The difference though is on iOS devices, apps can't really share files between apps and so you can have your Dropbox app on your device and you can access the FileMaker file. But the first thing it's going to do is going to ask you, do you want to copy that to FileMaker Go and it's actually going to create a copy and put it in the FileMaker Go application. It's not going to then be writing that back to Dropbox. And so the problem there is that if your process is to only update records on FileMaker Pro on your laptop and then occasionally download it so you have offline access to at least view and see records and find records and report on it, then that makes complete sense. You can definitely do that. Just keep going back to Dropbox and copying over a new version of the file. But if you expect to make changes there and then have those changes go back to Dropbox, you can't really do it. There's really no option to do that there. That's unfortunate. It's just how iOS works. It's kind of how files just exist to their apps and only to their apps. Great. So we're at the top of the hour now and I'd like to actually throw out one more thing before we leave you guys, which is we have a developers conference every year, about 1,100 attendees. Typically this year it's in San Diego, California, August 12th through 15th. That's a great opportunity to go see more than 60 sessions, business, technical, a specific track for FileMaker Go and iOS-related things like we're speaking about here today. And even an opportunity to participate in the FileMaker training series for several modules. We'd like to encourage you to check that out and Matt looks like he has something to add there. I'll also add that all of these sync tool providers, the Go Zinc and MirrorSync and SyncDec to Go, all of these people will probably be there too. So if you wanna ask them questions, I'll be there, you can ask me questions as well. So if you feel free to show up, you can ask us any questions you want. We will be there at your disposal. Thanks very much. We'd like to thank you folks for being with us today. We encourage you to come back to subsequent web seminars. We'll be archiving this seminar along with all of the other ones that are on our website at filemaker.com slash support slash webinars. And we'll look forward to seeing you in the future. Thanks for your time.