public void Init() { if (DeleteExistingData) { if (File.Exists(_dataFilePath)) { File.Delete(_dataFilePath); } } var existingDataFile = GetOfflineData(); if (existingDataFile != null) { OfflineData migratedDataFile = StartMigrationExistingData(existingDataFile); if (migratedDataFile != null) { SaveDataFile(migratedDataFile); } } else { OfflineData newDataFile = GetCurrentLevelsDataShippedWithGame(); if (newDataFile != null) { SaveDataFile(newDataFile); } } }
/// <summary> /// Creates the offline data row from the specified transaction time, transaction micro amount, /// transaction currency, conversion name and user identifier list. /// </summary> /// <param name="transactionTime">The transaction time.</param> /// <param name="transactionMicroAmount">The transaction micro amount.</param> /// <param name="transactionCurrency">The transaction currency.</param> /// <param name="conversionName">Name of the conversion.</param> /// <param name="userIdentifierList">The user identifier list.</param> /// <returns>The offline data row.</returns> private OfflineData CreateOfflineDataRow(DateTime transactionTime, long transactionMicroAmount, string transactionCurrency, string conversionName, UserIdentifier[] userIdentifierList) { StoreSalesTransaction storeSalesTransaction = new StoreSalesTransaction(); // For times use the format yyyyMMdd HHmmss [tz]. // For details, see // https://developers.google.com/adwords/api/docs/appendix/codes-formats#date-and-time-formats storeSalesTransaction.transactionTime = transactionTime.ToString("yyyyMMdd HHmmss"); storeSalesTransaction.conversionName = conversionName; storeSalesTransaction.userIdentifiers = userIdentifierList; Money money = new Money(); money.microAmount = transactionMicroAmount; RemarketingMoneyWithCurrency moneyWithCurrency = new RemarketingMoneyWithCurrency(); moneyWithCurrency.money = money; moneyWithCurrency.currencyCode = transactionCurrency; storeSalesTransaction.transactionAmount = moneyWithCurrency; OfflineData offlineData = new OfflineData(); offlineData.Item = storeSalesTransaction; return(offlineData); }
public void Reset() { m_Crc = 0; m_CloneObj = null; m_bClear = true; m_Guid = 0; m_Already = false; m_SetSceneParent = false; m_dealFinish = null; m_OfflineData = null; }
public void Reset() { m_Crc = 0; m_ResItem = null; m_GameObj = null; m_IsClear = true; m_Already = false; m_LoadPriority = LoadPriority.RES_LOWER; m_FinishCallBack = null; m_Param1 = m_Param2 = m_Param3 = null; m_OfflineData = null; }
public static void CreateOfflineData(GameObject Obj) { OfflineData offlineData = Obj.GetComponent <OfflineData>(); if (offlineData is null) { offlineData = Obj.AddComponent <OfflineData>(); } offlineData.BindDataInEditor(); EditorUtility.SetDirty(Obj); // 保存 Debug.Log("修改了" + Obj.name + " prefab!"); }
/// <summary> /// 根据实例化对象直接获取离线数据 /// </summary> /// <param name="obj">GameObject</param> /// <returns></returns> public OfflineData FindOfflineData(GameObject obj) { OfflineData data = null; ResourceObj resObj = null; m_ResourceObjDic.TryGetValue(obj.GetInstanceID(), out resObj); if (resObj != null) { data = resObj.m_OfflineData; } return(data); }
//保存预设时 自动挂载离线数据 public static void BindOfflineData(GameObject go) { string path = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(go); PrefabType type = PrefabType.None; if (path.Contains(PrefabStageListener.UIPrefabsPath)) { type = PrefabType.UI; } else if (path.Contains(PrefabStageListener.EffectPrefabsPath)) { type = PrefabType.Effect; } else if (path.Contains(PrefabStageListener.ModelPrefabsPath)) { type = PrefabType.Default; } if (type != PrefabType.None) { OfflineData data = null; switch (type) { case PrefabType.UI: data = go.GetComponent <UIOfflineData>(); if (data == null) { data = go.AddComponent <UIOfflineData>(); } break; case PrefabType.Effect: data = go.GetComponent <EffectOfflineData>(); if (data == null) { data = go.AddComponent <EffectOfflineData>(); } break; case PrefabType.Default: data = go.GetComponent <OfflineData>(); if (data == null) { data = go.AddComponent <OfflineData>(); } break; } data.BindData(); EditorUtility.SetDirty(go); Resources.UnloadUnusedAssets(); } LogTool.Log("预设以保存 prefab:", go.name); }
public async Task <int> SaveScanInstanceOrEditResult(ScanInstanceModel model) { try { return(await RestClient.Instance.PostAsync <int>($"{KamajiScanActions.SaveScanInstanceOrEditResult}", model)); } catch (Exception ex) { await OfflineData.From(model, nameof(SaveScanInstanceOrEditResult), ex).SaveAsync(); return(-1); } }
public async Task <int> AddChildScans(AddChildScansModel model) { try { return(await RestClient.Instance.PostAsync <int>($"{KamajiScanActions.AddChildScans}", model)); } catch (Exception ex) { await OfflineData.From(model, nameof(EditScan), ex).SaveAsync(); return(-1); } }
public void Reset() { m_Crc = 0; m_CloneObj = null; m_Guid = 0; m_IsClear = true; m_ResItem = null; m_OfflineData = null; m_IsRecycle = false; m_IsSceneObj = false; m_Callback = null; param1 = param2 = param3 = null; }
public void Reset() { m_Crc = 0; m_CloneObj = null; m_bClear = true; m_Guid = 0; m_ResItem = null; m_Already = false; m_SetSceneParent = false; m_DealFinis = null; m_Param1 = m_Param2 = m_Param3 = null; m_OfflineData = null; }
/// <summary> /// 上传离线数据 /// </summary> /// <param name="playerData"></param> /// <param name="callBack"></param> /// <returns></returns> private bool UpLoadOffLineData(OfflineData playerData, Action <bool, PlayerDataMessage> callBack) { return(SendData(SAVE_OFF_LINE, playerData, (ret, res) => { if (res.isOK) { Debug.Log("===============【上传离线数据成功】=============="); } else { Debug.Log("============【上传离线数据失败】==============" + GetMsgByErrorCode(res.err)); } callBack(ret, res); })); }
/// <summary> /// 尝试进行同步 /// </summary> private void SendOfflineData() { Queue <Dictionary <string, object> > localQueue = new Queue <Dictionary <string, object> >(LocalDatasManager.netBufferQueue); Debug.Log("提取离线数据:" + localQueue.Count); if (localQueue.Count > 0) { OfflineData offlineData = new OfflineData(GameMainManager.Instance.playerData); offlineData.offline = LocalDatasManager.netBufferQueue; UpLoadOffLineData(offlineData, (ret, res) => { LocalDatasManager.netBufferQueue = null; }); } }
public static void CreateOfflineData(GameObject obj) { OfflineData offlineData = obj.GetComponent <OfflineData>(); if (offlineData == null) { offlineData = obj.AddComponent <OfflineData>(); offlineData.BindData(); EditorUtility.SetDirty(obj); Debug.Log("修改了" + obj.name + " Prefab!"); Resources.UnloadUnusedAssets(); AssetDatabase.Refresh(); } }
private OfflineData GetOfflineData() { bool dataFileExists = File.Exists(_dataFilePath); if (!dataFileExists) { return(null); } var offlineDataString = File.ReadAllText(_dataFilePath); OfflineData offlineData = JsonUtility.FromJson <OfflineData>(offlineDataString); return(offlineData); }
public virtual void Reset() { username = ""; password = ""; offlineData = new OfflineData(); onlineData = new OnlineData(); for (int i = 0; i < ArchivesManager.MAX_ACCOUNTS; i++) { offlineData.battleMode.versusHuman.data[i] = new OfflineBattleDataEntry(); offlineData.battleMode.versusHuman.noSwitchingVariant.data[i] = new OfflineBattleDataEntry(); offlineData.battleMode.versusHuman.switchPositionsVariant.data[i] = new OfflineBattleDataEntry(); offlineData.battleMode.versusHuman.switchControlVariant.data[i] = new OfflineBattleDataEntry(); } }
public static void CreateOfflineUIData(GameObject obj) { obj.layer = LayerMask.NameToLayer("UI"); OfflineData uiData = obj.GetComponent <OfflineUIData>(); if (uiData is null) { uiData = obj.AddComponent <OfflineUIData>(); } uiData.BindDataInEditor(); EditorUtility.SetDirty(obj); Debug.Log("修改了" + obj.name + "UI Prefab!"); Resources.UnloadUnusedAssets(); AssetDatabase.Refresh(); }
public static void CreateOfflineData(GameObject gameObject) { OfflineData offlineData = gameObject.GetComponent <OfflineData>(); if (offlineData == null) { offlineData = gameObject.AddComponent <OfflineData>(); } offlineData.BindData(); EditorUtility.SetDirty(gameObject); Debug.Log($"修改了{gameObject.name} Prefab"); Resources.UnloadUnusedAssets(); AssetDatabase.Refresh(); }
private static void BindOfflineData <T>(GameObject obj) where T : OfflineData { OfflineData offlineData = obj.GetComponent <T>(); if (offlineData == null) { offlineData = obj.AddComponent <T>(); } offlineData.BindData(); //保存当前预制体 EditorUtility.SetDirty(obj); Debug.Log("修改了:" + obj.name + " prefab!"); Resources.UnloadUnusedAssets(); //卸载未使用的资源 AssetDatabase.Refresh(); //更新编辑器 }
private OfflineData GetCurrentLevelsDataShippedWithGame() { var _gameOfflineData = new OfflineData(); _gameOfflineData.PlayerInfo = new Player() { InstalledOn = DateTimeOffset.UtcNow.ToString() }; _gameOfflineData.GameLevels = new List <Level>(); var lessons = AssetDatabase.GetAllAssetPaths().Where(f => f.Contains("/Lessons/")).ToList(); foreach (var item in lessons) { //ITEM Ex : Assets/Resources/Lessons/Socialmedia/twitter.png string category = string.Empty; string question = string.Empty; try { category = item.Split('/')[3]; question = item.Split('/')[4]; Level newLevel = new Level() { Category = category, Question = question, }; _gameOfflineData.GameLevels.Add(newLevel); } catch { //Debug.LogException(ex); //This comes here when we get ITEM as : //Assets/Resources/Lessons/Socialmedia //Which is actually the folder for Category. //Simply supress here :) } } return(_gameOfflineData); }
public static void CreateOfflineData(string path) { GameObject obj = PrefabUtility.LoadPrefabContents(path); OfflineData offlineData = obj.GetComponent <OfflineData>(); if (offlineData == null) { offlineData = obj.AddComponent <OfflineData>(); } offlineData.BindData(); EditorUtility.SetDirty(obj); Debug.Log("修改了" + obj.name + "prefab!"); if (PrefabUtility.SaveAsPrefabAsset(obj, path)) { PrefabUtility.UnloadPrefabContents(obj); } Resources.UnloadUnusedAssets(); AssetDatabase.Refresh(); }
private OfflineData StartMigrationExistingData(OfflineData existingDataFile) { OfflineData newData = GetCurrentLevelsDataShippedWithGame(); newData.PlayerInfo.PlayerName = existingDataFile.PlayerInfo.PlayerName; newData.PlayerInfo.InstalledOn = existingDataFile.PlayerInfo.InstalledOn; List <Level> ExistingUserPlayedLevels = existingDataFile.GameLevels.Where(f => f.Score >= 0).ToList(); foreach (var level in ExistingUserPlayedLevels) { var sameLevelInNewData = newData.GameLevels.Where(f => f.Question == level.Question && f.Category == level.Category).FirstOrDefault(); if (sameLevelInNewData != null) { sameLevelInNewData.Score = level.Score; } else { //Do nothing; probably that level is now removed in new version! } } return(newData); }
/// <summary> /// Runs the code example. /// </summary> /// <param name="user">The AdWords user.</param> /// <param name="conversionName">The conversion type name that you'd like to attribute this /// upload to.</param> /// <param name="externalUploadId">The external upload ID can be any number that you use to /// keep track of your uploads.</param> /// <param name="emailAddresses">The email addresses for creating user identifiers.</param> /// <param name="advertiserUploadTime">The advertiser upload time. For times, use the format /// yyyyMMdd HHmmss tz. For more details on formats, see: /// https://developers.google.com/adwords/api/docs/appendix/codes-formats#date-and-time-formats /// For time zones, see: /// https://developers.google.com/adwords/api/docs/appendix/codes-formats#timezone-ids</param> /// <param name="bridgeMapVersionId">The version ID of the bridge map.</param> /// <param name="uploadType">The type of data upload.</param> /// <param name="partnerId">The partner ID</param> public void Run(AdWordsUser user, string conversionName, long externalUploadId, string[] emailAddresses, string advertiserUploadTime, string bridgeMapVersionId, OfflineDataUploadType uploadType, int partnerId) { using (OfflineDataUploadService offlineDataUploadService = (OfflineDataUploadService)user.GetService( AdWordsService.v201802.OfflineDataUploadService)) { offlineDataUploadService.RequestHeader.partialFailure = true; // Create the first offline data row for upload. // This transaction occurred 7 days ago with amount of 200 USD. DateTime transactionTime1 = DateTime.Now; transactionTime1.AddDays(-7); long transactionAmount1 = 200000000; string transactionCurrencyCode1 = "USD"; UserIdentifier[] userIdentifierList1 = new UserIdentifier[] { CreateUserIdentifier(OfflineDataUploadUserIdentifierType.HASHED_EMAIL, emailAddresses[0]), CreateUserIdentifier(OfflineDataUploadUserIdentifierType.STATE, "New York") }; OfflineData offlineData1 = CreateOfflineDataRow(transactionTime1, transactionAmount1, transactionCurrencyCode1, conversionName, userIdentifierList1); // Create the second offline data row for upload. // This transaction occurred 14 days ago with amount of 450 EUR. DateTime transactionTime2 = DateTime.Now; transactionTime2.AddDays(-14); long transactionAmount2 = 450000000; string transactionCurrencyCode2 = "EUR"; UserIdentifier[] userIdentifierList2 = new UserIdentifier[] { CreateUserIdentifier(OfflineDataUploadUserIdentifierType.HASHED_EMAIL, emailAddresses[1]), CreateUserIdentifier(OfflineDataUploadUserIdentifierType.STATE, "California") }; OfflineData offlineData2 = CreateOfflineDataRow(transactionTime2, transactionAmount2, transactionCurrencyCode2, conversionName, userIdentifierList2); // Create offline data upload object. OfflineDataUpload offlineDataUpload = new OfflineDataUpload(); offlineDataUpload.externalUploadId = externalUploadId; offlineDataUpload.offlineDataList = new OfflineData[] { offlineData1, offlineData2 }; // Set the type and metadata of this upload. offlineDataUpload.uploadType = uploadType; StoreSalesUploadCommonMetadata storeSalesMetaData = null; switch (uploadType) { case OfflineDataUploadType.STORE_SALES_UPLOAD_FIRST_PARTY: storeSalesMetaData = new FirstPartyUploadMetadata() { loyaltyRate = 1, transactionUploadRate = 1 }; break; case OfflineDataUploadType.STORE_SALES_UPLOAD_THIRD_PARTY: storeSalesMetaData = new ThirdPartyUploadMetadata() { loyaltyRate = 1.0, transactionUploadRate = 1.0, advertiserUploadTime = advertiserUploadTime, validTransactionRate = 1.0, partnerMatchRate = 1.0, partnerUploadRate = 1.0, bridgeMapVersionId = bridgeMapVersionId, partnerId = partnerId }; break; } UploadMetadata uploadMetadata = new UploadMetadata(); uploadMetadata.Item = storeSalesMetaData; offlineDataUpload.uploadMetadata = uploadMetadata; // Create an offline data upload operation. OfflineDataUploadOperation offlineDataUploadOperation = new OfflineDataUploadOperation(); offlineDataUploadOperation.@operator = Operator.ADD; offlineDataUploadOperation.operand = offlineDataUpload; // Keep the operations in an array, so it may be reused later for error processing. List <OfflineDataUploadOperation> operations = new List <OfflineDataUploadOperation>(); operations.Add(offlineDataUploadOperation); try { // Upload offline data to the server. OfflineDataUploadReturnValue result = offlineDataUploadService.mutate( operations.ToArray()); offlineDataUpload = result.value[0]; // Print the upload ID and status. Console.WriteLine("Uploaded offline data with external upload ID {0}, " + "and upload status {1}.", offlineDataUpload.externalUploadId, offlineDataUpload.uploadStatus); // Print any partial failure errors from the response. if (result.partialFailureErrors != null) { foreach (ApiError apiError in result.partialFailureErrors) { // Get the index of the failed operation from the error's field path elements. int operationIndex = apiError.GetOperationIndex(); if (operationIndex != -1) { OfflineDataUpload failedOfflineDataUpload = operations[operationIndex].operand; // Get the index of the entry in the offline data list from the error's field path // elements. int offlineDataListIndex = apiError.GetFieldPathIndex("offlineDataList"); Console.WriteLine("Offline data list entry {0} in operation {1} with external " + "upload ID {2} and type '{3}' has triggered a failure for the following " + "reason: '{4}'.", offlineDataListIndex, operationIndex, failedOfflineDataUpload.externalUploadId, failedOfflineDataUpload.uploadType, apiError.errorString); } else { Console.WriteLine("A failure has occurred for the following reason: {0}", apiError.errorString); } } } } catch (Exception e) { throw new System.ApplicationException("Failed upload offline data conversions.", e); } } }
private void SaveDataFile(OfflineData offlineData) { string gameDataString = JsonUtility.ToJson(offlineData); File.WriteAllText(_dataFilePath, gameDataString); }
/// <summary> /// Runs the code example. /// </summary> /// <param name="user">The AdWords user.</param> /// <param name="conversionName">The conversion type name that you'd like to attribute this /// upload to.</param> /// <param name="externalUploadId">The external upload ID can be any number that you use to /// keep track of your uploads.</param> /// <param name="emailAddresses">The email addresses for creating user identifiers.</param> public void Run(AdWordsUser user, string conversionName, long externalUploadId, string[] emailAddresses) { // Get the OfflineDataUploadService. OfflineDataUploadService offlineDataUploadService = (OfflineDataUploadService)user.GetService( AdWordsService.v201710.OfflineDataUploadService); // Create the first offline data row for upload. // This transaction occurred 7 days ago with amount of 200 USD. DateTime transactionTime1 = new DateTime(); transactionTime1.AddDays(-7); long transactionAmount1 = 200000000; string transactionCurrencyCode1 = "USD"; UserIdentifier[] userIdentifierList1 = new UserIdentifier[] { CreateUserIdentifier(OfflineDataUploadUserIdentifierType.HASHED_EMAIL, emailAddresses[0]), CreateUserIdentifier(OfflineDataUploadUserIdentifierType.STATE, "New York") }; OfflineData offlineData1 = CreateOfflineDataRow(transactionTime1, transactionAmount1, transactionCurrencyCode1, conversionName, userIdentifierList1); // Create the second offline data row for upload. // This transaction occurred 14 days ago with amount of 450 EUR. DateTime transactionTime2 = new DateTime(); transactionTime2.AddDays(-14); long transactionAmount2 = 450000000; string transactionCurrencyCode2 = "EUR"; UserIdentifier[] userIdentifierList2 = new UserIdentifier[] { CreateUserIdentifier(OfflineDataUploadUserIdentifierType.HASHED_EMAIL, emailAddresses[1]), CreateUserIdentifier(OfflineDataUploadUserIdentifierType.STATE, "California") }; OfflineData offlineData2 = CreateOfflineDataRow(transactionTime2, transactionAmount2, transactionCurrencyCode2, conversionName, userIdentifierList2); // Create offline data upload object. OfflineDataUpload offlineDataUpload = new OfflineDataUpload(); offlineDataUpload.externalUploadId = externalUploadId; offlineDataUpload.offlineDataList = new OfflineData[] { offlineData1, offlineData2 }; // Optional: You can set the type of this upload. // offlineDataUpload.uploadType = OfflineDataUploadType.STORE_SALES_UPLOAD_FIRST_PARTY; // Create an offline data upload operation. OfflineDataUploadOperation offlineDataUploadOperation = new OfflineDataUploadOperation(); offlineDataUploadOperation.@operator = Operator.ADD; offlineDataUploadOperation.operand = offlineDataUpload; try { // Upload offline data to the server. OfflineDataUploadReturnValue result = offlineDataUploadService.mutate( new OfflineDataUploadOperation[] { offlineDataUploadOperation }); offlineDataUpload = result.value[0]; // Print the upload ID and status. Console.WriteLine("Uploaded offline data with external upload ID {0}, " + "and upload status {1}.", offlineDataUpload.externalUploadId, offlineDataUpload.uploadStatus); // Print any partial data errors from the response. The order of the partial // data errors list is the same as the uploaded offline data list in the // request. if (offlineDataUpload.partialDataErrors != null) { for (int i = 0; i < offlineDataUpload.partialDataErrors.Length; i++) { ApiError partialDataError = offlineDataUpload.partialDataErrors[i]; Console.WriteLine("Found a partial error for offline data {0} with error string: {1}.", i + 1, partialDataError.errorString); } } } catch (Exception e) { throw new System.ApplicationException("Failed upload offline data conversions.", e); } }
public Task <IActionResult> DeleteOfflineData(int id) => this.ResultAsync(() => OfflineData.Delete(id));
/// <summary> /// Runs the code example. /// </summary> /// <param name="user">The AdWords user.</param> /// <param name="conversionName">The conversion type name that you'd like to attribute this /// upload to.</param> /// <param name="externalUploadId">The external upload ID can be any number that you use to /// keep track of your uploads.</param> /// <param name="emailAddresses">The email addresses for creating user identifiers.</param> /// <param name="advertiserUploadTime">The advertiser upload time. For times, use the format /// yyyyMMdd HHmmss tz. For more details on formats, see: /// https://developers.google.com/adwords/api/docs/appendix/codes-formats#date-and-time-formats /// For time zones, see: /// https://developers.google.com/adwords/api/docs/appendix/codes-formats#timezone-ids</param> /// <param name="bridgeMapVersionId">The version ID of the bridge map.</param> /// <param name="uploadType">The type of data upload.</param> /// <param name="partnerId">The partner ID</param> public void Run(AdWordsUser user, string conversionName, long externalUploadId, string[] emailAddresses, string advertiserUploadTime, string bridgeMapVersionId, OfflineDataUploadType uploadType, int partnerId) { using (OfflineDataUploadService offlineDataUploadService = (OfflineDataUploadService)user.GetService( AdWordsService.v201710.OfflineDataUploadService)) { // Create the first offline data row for upload. // This transaction occurred 7 days ago with amount of 200 USD. DateTime transactionTime1 = new DateTime(); transactionTime1.AddDays(-7); long transactionAmount1 = 200000000; string transactionCurrencyCode1 = "USD"; UserIdentifier[] userIdentifierList1 = new UserIdentifier[] { CreateUserIdentifier(OfflineDataUploadUserIdentifierType.HASHED_EMAIL, emailAddresses[0]), CreateUserIdentifier(OfflineDataUploadUserIdentifierType.STATE, "New York") }; OfflineData offlineData1 = CreateOfflineDataRow(transactionTime1, transactionAmount1, transactionCurrencyCode1, conversionName, userIdentifierList1); // Create the second offline data row for upload. // This transaction occurred 14 days ago with amount of 450 EUR. DateTime transactionTime2 = new DateTime(); transactionTime2.AddDays(-14); long transactionAmount2 = 450000000; string transactionCurrencyCode2 = "EUR"; UserIdentifier[] userIdentifierList2 = new UserIdentifier[] { CreateUserIdentifier(OfflineDataUploadUserIdentifierType.HASHED_EMAIL, emailAddresses[1]), CreateUserIdentifier(OfflineDataUploadUserIdentifierType.STATE, "California") }; OfflineData offlineData2 = CreateOfflineDataRow(transactionTime2, transactionAmount2, transactionCurrencyCode2, conversionName, userIdentifierList2); // Create offline data upload object. OfflineDataUpload offlineDataUpload = new OfflineDataUpload(); offlineDataUpload.externalUploadId = externalUploadId; offlineDataUpload.offlineDataList = new OfflineData[] { offlineData1, offlineData2 }; // Set the type and metadata of this upload. offlineDataUpload.uploadType = uploadType; StoreSalesUploadCommonMetadata storeSalesMetaData = null; switch (uploadType) { case OfflineDataUploadType.STORE_SALES_UPLOAD_FIRST_PARTY: storeSalesMetaData = new FirstPartyUploadMetadata() { loyaltyRate = 1, transactionUploadRate = 1 }; break; case OfflineDataUploadType.STORE_SALES_UPLOAD_THIRD_PARTY: storeSalesMetaData = new ThirdPartyUploadMetadata() { loyaltyRate = 1.0, transactionUploadRate = 1.0, advertiserUploadTime = advertiserUploadTime, validTransactionRate = 1.0, partnerMatchRate = 1.0, partnerUploadRate = 1.0, bridgeMapVersionId = bridgeMapVersionId, partnerId = partnerId }; break; } UploadMetadata uploadMetadata = new UploadMetadata(); uploadMetadata.Item = storeSalesMetaData; offlineDataUpload.uploadMetadata = uploadMetadata; // Create an offline data upload operation. OfflineDataUploadOperation offlineDataUploadOperation = new OfflineDataUploadOperation(); offlineDataUploadOperation.@operator = Operator.ADD; offlineDataUploadOperation.operand = offlineDataUpload; try { // Upload offline data to the server. OfflineDataUploadReturnValue result = offlineDataUploadService.mutate( new OfflineDataUploadOperation[] { offlineDataUploadOperation }); offlineDataUpload = result.value[0]; // Print the upload ID and status. Console.WriteLine("Uploaded offline data with external upload ID {0}, " + "and upload status {1}.", offlineDataUpload.externalUploadId, offlineDataUpload.uploadStatus); // Print any partial data errors from the response. The order of the partial // data errors list is the same as the uploaded offline data list in the // request. if (offlineDataUpload.partialDataErrors != null) { for (int i = 0; i < offlineDataUpload.partialDataErrors.Length; i++) { ApiError partialDataError = offlineDataUpload.partialDataErrors[i]; Console.WriteLine("Found a partial error for offline data {0} with error " + "string: {1}.", i + 1, partialDataError.errorString); } } } catch (Exception e) { throw new System.ApplicationException("Failed upload offline data conversions.", e); } } }