Replies: 12 comments 27 replies
-
Hi @sisaacks I'll give you some examples that I'm using in my projects API Example:
API Startup
Xamarin Example:
|
Beta Was this translation helpful? Give feedback.
-
@maxrodro thank you for the info, I have a couple questions
thank you again for the information, I am trying wrap my head around this and what needs to be done. |
Beta Was this translation helpful? Give feedback.
-
Okay...I think you have answered part of my question. How do I generate
the schema on the server. I have followed the tutorial but I cannot get
the CLI to install the .dotnet ef.
I keep getting an error about a preview release......I found some info on
it, but I cant find what preview version it is.
So from my understanding above...if the schema is defined on the server but
not the client....the schema will be created on the client side but if the
schema is on the client it will never be created on the client.
As of right now I cannot figure out how to get the schema generated on the
server
according to your last bullet above on *Client Data*, I am slightly
confused, I do two syncs to begin with (shouldn't the client data be
uploaded to the server on the second sync)
// Launch the sync process
var s1 = await agent.SynchronizeAsync();
/// Make as second sync. (should the data from the client now be uploaded
to the server) ??
// All local rows that were existing before first sync
happened, will be uploaded correctly
s1 = await agent.SynchronizeAsync()
…On Mon, May 9, 2022 at 12:26 PM Sébastien Pertus ***@***.***> wrote:
*Server* is the "master node". He is basically the truth.
Everyone (all *Clients*) will sync the server locally (and will
eventually send their changes)
So far, before you start sync anything (before *DMS* creates all the
metadatas, tracking tables etc) you should be aware of some big differences
from *Server* side / *Clients* sides:
- You can have only *1 Server*
- You can have *any numbers of Clients*.
- *Server* MUST exists with a valid schema. *DMS* will never creates
any schema tables on the server side.
- *Client* may have an existing schema with the exact same schema as
*Server*, otherwise *DMS* will create it on the first sync.
- *Server* data already existing *BEFORE* first sync (Before DMS
creates all the tracking things) will be downloaded to all *Clients*
on first sync
- *Client* data (if you choose to start with an existing client
database) will NOT be uploaded on the first sync.
- All data after the first sync will be uploaded (because they are
tracked) of course
In your case:
- Be sure to have an existing *Server* database with an existing schema
- You should try to start from scratch with no clients database and
see if it works.
- Eventually once you masterize everything, you can think to start
with more complex scenario (like handling existing clients)
Now, if you really want to upload existing data from clients (once again,
before everything is configured by *DMS*, and so far, tracked), you can
use an hidden gem on LocalOrchestrator : the UpdateUntrackedRowsAsync
method.
This method will not work if you are using the SqlChangeTrackingProvider on
the client side. See #342
<#342>
—
Reply to this email directly, view it on GitHub
<#730 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AOZ5VYA3G2ENSYQTPT3BB63VJFRE7ANCNFSM5UT5BTVA>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
Understood, i simply cannot get the CLI to work for the database migration. Thank you for your help on DMS
SUA SPONTE
-- Its better to fail while daring greatly, than to be with those cold and timid souls who neither know victory nor defeat.
-- Someone once told me not to bite off more than I could chew. I said I'd rather choke on greatness than nibble on mediocrity.
… On May 9, 2022, at 12:51, Sébastien Pertus ***@***.***> wrote:
1)You are responsible of the server side schema. It's not a DMS story
All data inserted / deleted / updated between the first sync and second sync, will be ... synced
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.
|
Beta Was this translation helpful? Give feedback.
-
So I did this...and the data was not synced between the first and second
sync....meaning it was not pushed to the server.
I am not sure what I am doing wrong.
var options = new SyncOptions() { CleanMetadatas = true,
DisableConstraintsOnApplyChanges = true };
var serverOrchestrator = new WebClientOrchestrator("
https://automobilewebapi.azurewebsites.net/api/sync");
var clientProvider = new
SqliteSyncProvider(connection.DatabasePath);
var tables = new string[] { "Vehicle" };
var agent = new SyncAgent(clientProvider,
serverOrchestrator, tables);
// Launch the sync process
var s1 = await agent.SynchronizeAsync();
// Write results
Console.WriteLine(s1);
// Get local schema for the FIRST client sync
var scope = await agent.LocalOrchestrator.GetSchemaAsync();
// insert the new item into the database
if (ShouldSeedData())
{
var vehicle = new Vehicle
{
Color = "Silver",
Id = Guid.NewGuid(),
Make = "RAM",
Model = "TRX",
VehicleType = VehicleType.Truck,
Year = "2021"
};
connection.Insert(vehicle);
}
/// Make as second sync.
// All local rows that were existing before first sync
happened, will be uploaded correctly
s1 = await agent.SynchronizeAsync();
// Write results
Console.WriteLine(s1);
On Mon, May 9, 2022 at 1:04 PM Seth Isaacks ***@***.***>
wrote:
… Understood, i simply cannot get the CLI to work for the database
migration. Thank you for your help on DMS
*SUA SPONTE*
-- Its better to fail while daring greatly, than to be with those cold
and timid souls who neither know victory nor defeat.
-- Someone once told me not to bite off more than I could chew. I said I'd
rather choke on greatness than nibble on mediocrity.
On May 9, 2022, at 12:51, Sébastien Pertus ***@***.***>
wrote:
1)You are responsible of the server side schema. It's not a DMS story
1. All data inserted / deleted / updated between the first sync and
second sync, will be ... synced
—
Reply to this email directly, view it on GitHub
<#730 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AOZ5VYFV6EKNPRRBHO5P773VJFUCPANCNFSM5UT5BTVA>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
I also tried adding an item and syncing again, still doesnt work.
I am not sure what i have done wrong.
This is very frustrating.
I followed your tutorial to a T
On Mon, May 9, 2022 at 5:58 PM Seth Isaacks ***@***.***>
wrote:
… So I did this...and the data was not synced between the first and second
sync....meaning it was not pushed to the server.
I am not sure what I am doing wrong.
var options = new SyncOptions() { CleanMetadatas = true,
DisableConstraintsOnApplyChanges = true };
var serverOrchestrator = new WebClientOrchestrator("
https://automobilewebapi.azurewebsites.net/api/sync");
var clientProvider = new
SqliteSyncProvider(connection.DatabasePath);
var tables = new string[] { "Vehicle" };
var agent = new SyncAgent(clientProvider,
serverOrchestrator, tables);
// Launch the sync process
var s1 = await agent.SynchronizeAsync();
// Write results
Console.WriteLine(s1);
// Get local schema for the FIRST client sync
var scope = await agent.LocalOrchestrator.GetSchemaAsync();
// insert the new item into the database
if (ShouldSeedData())
{
var vehicle = new Vehicle
{
Color = "Silver",
Id = Guid.NewGuid(),
Make = "RAM",
Model = "TRX",
VehicleType = VehicleType.Truck,
Year = "2021"
};
connection.Insert(vehicle);
}
/// Make as second sync.
// All local rows that were existing before first sync
happened, will be uploaded correctly
s1 = await agent.SynchronizeAsync();
// Write results
Console.WriteLine(s1);
On Mon, May 9, 2022 at 1:04 PM Seth Isaacks ***@***.***>
wrote:
> Understood, i simply cannot get the CLI to work for the database
> migration. Thank you for your help on DMS
>
> *SUA SPONTE*
> -- Its better to fail while daring greatly, than to be with those cold
> and timid souls who neither know victory nor defeat.
> -- Someone once told me not to bite off more than I could chew. I said
> I'd rather choke on greatness than nibble on mediocrity.
>
> On May 9, 2022, at 12:51, Sébastien Pertus ***@***.***>
> wrote:
>
>
>
> 1)You are responsible of the server side schema. It's not a DMS story
>
> 1. All data inserted / deleted / updated between the first sync and
> second sync, will be ... synced
>
> —
> Reply to this email directly, view it on GitHub
> <#730 (reply in thread)>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AOZ5VYFV6EKNPRRBHO5P773VJFUCPANCNFSM5UT5BTVA>
> .
> You are receiving this because you were mentioned.Message ID:
> ***@***.***>
>
>
|
Beta Was this translation helpful? Give feedback.
-
Here is my web api file......i am absolutely no clue why this is not working
using Dotmim.Sync;
using Dotmim.Sync.SqlServer;
using Azure.Identity;
using Microsoft.EntityFrameworkCore;
using AutomobileWebApi.Models;
var builder = WebApplication.CreateBuilder(args);
//builder.Services.AddDbContext<VehicleDb>(opt =>
opt.UseSqlServer(builder.Configuration.GetConnectionString("NfoConnectionString")));
//builder.Services.AddDatabaseDeveloperPageExceptionFilter();
//var keyVaultEndpoint = new
Uri(Environment.GetEnvironmentVariable("VaultUri"));
//builder.Configuration.AddAzureKeyVault(keyVaultEndpoint, new
DefaultAzureCredential());
// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession(options => options.IdleTimeout =
TimeSpan.FromMinutes(30));
// [Required]: Get a connection string to your server data source
var connectionString =
builder.Configuration.GetConnectionString("NfoConnectionString");
// [Required] Tables involved in the sync process:
var tables = new string[] {"Vehicle" };
var options = new SyncOptions { };
// [Required]: Add a SqlSyncProvider acting as the server hub.
builder.Services.AddSyncServer<SqlSyncProvider>(connectionString, tables,
options);
var app = builder.Build();
// Configure the HTTP request pipeline.
//if (!app.Environment.IsDevelopment())
//{
// app.UseExceptionHandler("/Home/Error");
// // The default HSTS value is 30 days. You may want to change this for
production scenarios, see https://aka.ms/aspnetcore-hsts.
// app.UseHsts();
//}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseSession();
app.MapControllers();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
On Mon, May 9, 2022 at 6:04 PM Seth Isaacks ***@***.***>
wrote:
… I also tried adding an item and syncing again, still doesnt work.
I am not sure what i have done wrong.
This is very frustrating.
I followed your tutorial to a T
On Mon, May 9, 2022 at 5:58 PM Seth Isaacks ***@***.***>
wrote:
> So I did this...and the data was not synced between the first and second
> sync....meaning it was not pushed to the server.
> I am not sure what I am doing wrong.
>
> var options = new SyncOptions() { CleanMetadatas = true,
> DisableConstraintsOnApplyChanges = true };
> var serverOrchestrator = new WebClientOrchestrator("
> https://automobilewebapi.azurewebsites.net/api/sync");
> var clientProvider = new
> SqliteSyncProvider(connection.DatabasePath);
> var tables = new string[] { "Vehicle" };
> var agent = new SyncAgent(clientProvider,
> serverOrchestrator, tables);
>
> // Launch the sync process
> var s1 = await agent.SynchronizeAsync();
>
> // Write results
> Console.WriteLine(s1);
>
> // Get local schema for the FIRST client sync
> var scope = await
> agent.LocalOrchestrator.GetSchemaAsync();
>
> // insert the new item into the database
> if (ShouldSeedData())
> {
> var vehicle = new Vehicle
> {
> Color = "Silver",
> Id = Guid.NewGuid(),
> Make = "RAM",
> Model = "TRX",
> VehicleType = VehicleType.Truck,
> Year = "2021"
> };
>
> connection.Insert(vehicle);
> }
>
>
> /// Make as second sync.
> // All local rows that were existing before first sync
> happened, will be uploaded correctly
> s1 = await agent.SynchronizeAsync();
>
> // Write results
> Console.WriteLine(s1);
>
> On Mon, May 9, 2022 at 1:04 PM Seth Isaacks <
> ***@***.***> wrote:
>
>> Understood, i simply cannot get the CLI to work for the database
>> migration. Thank you for your help on DMS
>>
>> *SUA SPONTE*
>> -- Its better to fail while daring greatly, than to be with those cold
>> and timid souls who neither know victory nor defeat.
>> -- Someone once told me not to bite off more than I could chew. I said
>> I'd rather choke on greatness than nibble on mediocrity.
>>
>> On May 9, 2022, at 12:51, Sébastien Pertus ***@***.***>
>> wrote:
>>
>>
>>
>> 1)You are responsible of the server side schema. It's not a DMS story
>>
>> 1. All data inserted / deleted / updated between the first sync and
>> second sync, will be ... synced
>>
>> —
>> Reply to this email directly, view it on GitHub
>> <#730 (reply in thread)>,
>> or unsubscribe
>> <https://github.com/notifications/unsubscribe-auth/AOZ5VYFV6EKNPRRBHO5P773VJFUCPANCNFSM5UT5BTVA>
>> .
>> You are receiving this because you were mentioned.Message ID:
>> ***@***.***>
>>
>>
|
Beta Was this translation helpful? Give feedback.
-
Sebastian the other thing I may mention, and maybe you have dealt with this
before, but I am connecting to a DB hosted in Azure.
I have went through all your tutorials, I can access the web
api.....everything is working fine...other than data syncing
I have the same schema
I have a sqlite lite local db and a Azure Sql Server db
I have only one client and one Server
I have no explanation as to why the data will not sync
Other than in my web api, do I need a controller for every table or does
the sync table take care of that?
There has to be something I am missing
On Mon, May 9, 2022 at 6:12 PM Seth Isaacks ***@***.***>
wrote:
… Here is my web api file......i am absolutely no clue why this is not
working
using Dotmim.Sync;
using Dotmim.Sync.SqlServer;
using Azure.Identity;
using Microsoft.EntityFrameworkCore;
using AutomobileWebApi.Models;
var builder = WebApplication.CreateBuilder(args);
//builder.Services.AddDbContext<VehicleDb>(opt =>
opt.UseSqlServer(builder.Configuration.GetConnectionString("NfoConnectionString")));
//builder.Services.AddDatabaseDeveloperPageExceptionFilter();
//var keyVaultEndpoint = new
Uri(Environment.GetEnvironmentVariable("VaultUri"));
//builder.Configuration.AddAzureKeyVault(keyVaultEndpoint, new
DefaultAzureCredential());
// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession(options => options.IdleTimeout =
TimeSpan.FromMinutes(30));
// [Required]: Get a connection string to your server data source
var connectionString =
builder.Configuration.GetConnectionString("NfoConnectionString");
// [Required] Tables involved in the sync process:
var tables = new string[] {"Vehicle" };
var options = new SyncOptions { };
// [Required]: Add a SqlSyncProvider acting as the server hub.
builder.Services.AddSyncServer<SqlSyncProvider>(connectionString, tables,
options);
var app = builder.Build();
// Configure the HTTP request pipeline.
//if (!app.Environment.IsDevelopment())
//{
// app.UseExceptionHandler("/Home/Error");
// // The default HSTS value is 30 days. You may want to change this
for production scenarios, see https://aka.ms/aspnetcore-hsts.
// app.UseHsts();
//}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseSession();
app.MapControllers();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
On Mon, May 9, 2022 at 6:04 PM Seth Isaacks ***@***.***>
wrote:
> I also tried adding an item and syncing again, still doesnt work.
> I am not sure what i have done wrong.
> This is very frustrating.
> I followed your tutorial to a T
>
> On Mon, May 9, 2022 at 5:58 PM Seth Isaacks <
> ***@***.***> wrote:
>
>> So I did this...and the data was not synced between the first and second
>> sync....meaning it was not pushed to the server.
>> I am not sure what I am doing wrong.
>>
>> var options = new SyncOptions() { CleanMetadatas = true,
>> DisableConstraintsOnApplyChanges = true };
>> var serverOrchestrator = new WebClientOrchestrator("
>> https://automobilewebapi.azurewebsites.net/api/sync");
>> var clientProvider = new
>> SqliteSyncProvider(connection.DatabasePath);
>> var tables = new string[] { "Vehicle" };
>> var agent = new SyncAgent(clientProvider,
>> serverOrchestrator, tables);
>>
>> // Launch the sync process
>> var s1 = await agent.SynchronizeAsync();
>>
>> // Write results
>> Console.WriteLine(s1);
>>
>> // Get local schema for the FIRST client sync
>> var scope = await
>> agent.LocalOrchestrator.GetSchemaAsync();
>>
>> // insert the new item into the database
>> if (ShouldSeedData())
>> {
>> var vehicle = new Vehicle
>> {
>> Color = "Silver",
>> Id = Guid.NewGuid(),
>> Make = "RAM",
>> Model = "TRX",
>> VehicleType = VehicleType.Truck,
>> Year = "2021"
>> };
>>
>> connection.Insert(vehicle);
>> }
>>
>>
>> /// Make as second sync.
>> // All local rows that were existing before first sync
>> happened, will be uploaded correctly
>> s1 = await agent.SynchronizeAsync();
>>
>> // Write results
>> Console.WriteLine(s1);
>>
>> On Mon, May 9, 2022 at 1:04 PM Seth Isaacks <
>> ***@***.***> wrote:
>>
>>> Understood, i simply cannot get the CLI to work for the database
>>> migration. Thank you for your help on DMS
>>>
>>> *SUA SPONTE*
>>> -- Its better to fail while daring greatly, than to be with those cold
>>> and timid souls who neither know victory nor defeat.
>>> -- Someone once told me not to bite off more than I could chew. I said
>>> I'd rather choke on greatness than nibble on mediocrity.
>>>
>>> On May 9, 2022, at 12:51, Sébastien Pertus ***@***.***>
>>> wrote:
>>>
>>>
>>>
>>> 1)You are responsible of the server side schema. It's not a DMS story
>>>
>>> 1. All data inserted / deleted / updated between the first sync and
>>> second sync, will be ... synced
>>>
>>> —
>>> Reply to this email directly, view it on GitHub
>>> <#730 (reply in thread)>,
>>> or unsubscribe
>>> <https://github.com/notifications/unsubscribe-auth/AOZ5VYFV6EKNPRRBHO5P773VJFUCPANCNFSM5UT5BTVA>
>>> .
>>> You are receiving this because you were mentioned.Message ID:
>>> ***@***.***>
>>>
>>>
|
Beta Was this translation helpful? Give feedback.
-
Now i am getting another error: Dotmim.Sync.Web.Client.HttpSyncWebException: Invalid object name 'Vehicle_tracking'
I dont understand why this so difficult.
I have followed the tutorial step by step.
something is not working correctly
I just dumped my sqlite data and its not missing anything.
public class Vehicle
{
[PrimaryKey]
public Guid Id { get; set; }
public VehicleType VehicleType { get; set; }
public string Make { get; set; }
public string Year { get; set; }
}
I can insert and delete with ease
I wonder if it has something to do with the primary key
is there something I have to declare for DMS on the Webapi?
I have been working on this for days now.
On Tue, May 10, 2022 at 8:30 AM Seth Isaacks ***@***.***>
wrote:
… I dont understand how to let dotmim create my schema....I have to create
my schema for the Sqlite to work.
I automatically create the database on loan
the app would fail without that database
On Tue, May 10, 2022 at 8:24 AM Vext ***@***.***> wrote:
> This error message might mean that your SQLite database is missing a
> column in your main database. Delete your SQLite database and let DotMim
> recreate your local SQLite to see if this error message resolves.
>
> {Dotmim.Sync.SyncException: SQLite Error 1: 'no such column: base.Model'.
> ---> Microsoft.Data.Sqlite.SqliteException: SQLite Error 1: 'no such
> column: base.Model'.
>
> —
> Reply to this email directly, view it on GitHub
> <#730 (reply in thread)>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AOZ5VYA4FZRQXQZJZ4TANOLVJJ5SHANCNFSM5UT5BTVA>
> .
> You are receiving this because you were mentioned.Message ID:
> ***@***.***>
>
|
Beta Was this translation helpful? Give feedback.
-
I see what you have done in the example, thank you for taking the time.
That is a console application and my ap is an MOBILE application, SQLite is
configured much differently.
I deleted everything off of Azure and restarted and miraculously its now
working fine.
It was the only thing that I reasoned could be the issue, everything was
set up as you had instructed
I am sure I will have questions about how to Add Tables and Columns and
such as how the schema evolves.
…On Tue, May 10, 2022 at 2:06 PM Sébastien Pertus ***@***.***> wrote:
I've made a sample here : https://github.com/Mimetis/VehiclesSyncDemo
Once you are comfortable with, we will be able to look further, if needed
—
Reply to this email directly, view it on GitHub
<#730 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AOZ5VYAPCDYC5A7MNBS5N7DVJLFWHANCNFSM5UT5BTVA>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
I have a question about the Migration
is your example you have two sql sync providers
In my sync I have a sqliteSyncprovider and a WebClientOrchestrator
Should I be using those for the migration vs the two sqlsyncproviders?
Also, when I add a property to my model in the client side, sqlite auto
generates that field.
So do I still need a provider for the client side?
Regards
Seth Isaacks
On Tue, May 10, 2022 at 2:43 PM Seth Isaacks ***@***.***>
wrote:
… I see what you have done in the example, thank you for taking the time.
That is a console application and my ap is an MOBILE application, SQLite is
configured much differently.
I deleted everything off of Azure and restarted and miraculously its now
working fine.
It was the only thing that I reasoned could be the issue, everything was
set up as you had instructed
I am sure I will have questions about how to Add Tables and Columns and
such as how the schema evolves.
On Tue, May 10, 2022 at 2:06 PM Sébastien Pertus ***@***.***>
wrote:
> I've made a sample here : https://github.com/Mimetis/VehiclesSyncDemo
>
> Once you are comfortable with, we will be able to look further, if needed
>
> —
> Reply to this email directly, view it on GitHub
> <#730 (reply in thread)>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AOZ5VYAPCDYC5A7MNBS5N7DVJLFWHANCNFSM5UT5BTVA>
> .
> You are receiving this because you were mentioned.Message ID:
> ***@***.***>
>
|
Beta Was this translation helpful? Give feedback.
-
I dont understand how to let dotmim create my schema....I have to create my
schema for the Sqlite to work.
I automatically create the database on loan
the app would fail without that database
…On Tue, May 10, 2022 at 8:24 AM Vext ***@***.***> wrote:
This error message might mean that your SQLite database is missing a
column in your main database. Delete your SQLite database and let DotMim
recreate your local SQLite to see if this error message resolves.
{Dotmim.Sync.SyncException: SQLite Error 1: 'no such column: base.Model'.
---> Microsoft.Data.Sqlite.SqliteException: SQLite Error 1: 'no such
column: base.Model'.
—
Reply to this email directly, view it on GitHub
<#730 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AOZ5VYA4FZRQXQZJZ4TANOLVJJ5SHANCNFSM5UT5BTVA>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
Beta Was this translation helpful? Give feedback.
-
I have an Xamarin that is currently using a local sqlite database. I have been reading through the dotmim and asp.net web api tutorials and I am a little confused. Please excuse my ignorance about all this, I am new and trying to learn.
When I set up my web api, do I need to follow the instructions and set up a controller and db context for each table? OR do I simply use the controller referenced in the dotmim documentation? The dotmim documentation makes it seem like that is the only controller I need? But then I am confused how to link my web api up to Azure and the Azure SQL.
Once I call the sync function when the app starts, I am assuming this aligns the client and the server data. Will syncing thing happen automagically every time the local DB changes or do I need to call the sync function every time there is an update to the local db? I want the local DB and Sever to be in sync as much as possible.
If I can get these answered I think its a good start. I know I will have more to come. Thank you for anyone that can send me down the correct path.
Beta Was this translation helpful? Give feedback.
All reactions