Di Google Ads API, mask kolom digunakan untuk memberikan daftar kolom yang harus diperbarui oleh permintaan API. Setiap kolom yang tidak ditentukan dalam mask kolom akan diabaikan, meskipun dikirim ke server.
Class FieldMasks
Cara yang direkomendasikan untuk membuat mask kolom di library klien .NET adalah dengan menggunakan class utilitas FieldMasks bawaan, yang memungkinkan Anda membuat mask kolom dari objek yang diubah, bukan membuatnya dari awal.
Berikut contoh untuk memperbarui kampanye yang menggunakan metode
FieldMasks.AllSetFieldsOf untuk menghasilkan mask kolom yang mencantumkan semua kolom
yang ditetapkan. Kemudian, Anda dapat meneruskan mask kolom yang dihasilkan langsung ke panggilan update:
// Update campaign by setting its status to paused, and "Search network" to
// false.
Campaign campaignToUpdate = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
Status = CampaignStatus.Paused,
NetworkSettings = new NetworkSettings()
{
TargetSearchNetwork = false
}
};
// Create the operation.
CampaignOperation operation = new CampaignOperation()
{
Update = campaignToUpdate,
UpdateMask = FieldMasks.AllSetFieldsOf(campaignToUpdate)
};
// Update the campaign.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });
Terkadang, Anda mungkin perlu menggunakan objek yang ada dan memperbarui beberapa
kolom. Dalam kasus seperti ini, gunakan metode FieldMasks.FromChanges. Metode ini menghasilkan mask kolom yang merepresentasikan perbedaan antara dua objek:
Campaign existingCampaign;
// Obtain existingCampaign from an earlier API call.
// Create a new campaign based on the existing campaign for update.
Campaign campaignToUpdate = new Campaign(existingCampaign);
// Update campaign by setting its status to paused, and "Search network" to
// false.
campaignToUpdate.Status = CampaignStatus.Paused;
campaignToUpdate.NetworkSettings = new NetworkSettings()
{
TargetSearchNetwork = false
};
// Create the operation.
CampaignOperation operation = new CampaignOperation()
{
Update = campaignToUpdate,
UpdateMask = FieldMasks.FromChanges(existingCampaign, campaignToUpdate)
};
Menangani error FieldMaskError.FIELD_HAS_SUBFIELDS
Terkadang, Anda mungkin perlu menyetel kolom pesan tanpa memperbarui subkolomnya. Perhatikan contoh berikut:
// Creates a campaign with the proper resource name and an empty
// MaximizeConversions field.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
MaximizeConversions = new MaximizeConversions()
};
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = FieldMasks.AllSetFieldsOf(campaign)
};
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });
Panggilan API ini gagal dengan error FieldMaskError.FIELD_HAS_SUBFIELDS. Karena
MaximizeConversions memiliki sub-bidang, server
Google Ads API mengharapkan masker kolom untuk sub-bidang yang dapat diubah agar ada dalam
permintaan. Namun, FieldMasks tidak dapat membuat mask sub-bidang secara otomatis dalam situasi ini karena permintaan tidak menetapkan sub-bidang apa pun.
Dalam kasus seperti itu, Anda dapat menambahkan jalur secara manual ke fieldMask.Paths (yang merupakan
RepeatedField<string>):
// Creates a Campaign object with the proper resource name.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
};
FieldMask fieldMask = FieldMasks.AllSetFieldsOf(campaign);
// Only include 'maximize_conversions.target_cpa_micros' in the field mask
// as it is the only mutable subfield on MaximizeConversions when used as a
// standard bidding strategy.
//
// Learn more about standard and portfolio bidding strategies at:
// https://developers.google.com/google-ads/api/docs/campaigns/bidding/assign-strategies
fieldMask.Paths.Add("maximize_conversions.target_cpa_micros");
// Creates an operation to update the campaign with the specified fields.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = fieldMask
};
Hapus kolom
Google Ads API mendukung penghapusan beberapa nilai kolom. Untuk menghapus kolom, Anda harus
menyertakan kolom tersebut secara manual dalam mask kolom sambil membiarkan kolom tidak disetel pada
objek resource. Menetapkan kolom ke nilai defaultnya (seperti 0 untuk kolom
int64) tidak akan menghapus kolom.
Contoh kode berikut menunjukkan cara menghapus kolom target_cpa_micros dari
strategi bidding MaximizeConversions:
Kode yang benar
Kode berikut menghapus kolom target_cpa_micros karena menambahkan
maximize_conversions.target_cpa_micros ke mask kolom tanpa menetapkan
properti campaign.MaximizeConversions.TargetCpaMicros:
// Creates a Campaign object with the proper resource name.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
};
// Constructs a field mask from the existing campaign and adds the
// 'maximize_conversions.target_cpa_micros' field to the field mask, which
// clears this field from the bidding strategy without impacting any other
// fields on the bidding strategy.
FieldMask fieldMask = FieldMasks.AllSetFieldsOf(campaign);
fieldMask.Paths.Add("maximize_conversions.target_cpa_micros");
// Creates an operation to update the campaign with the specified field.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = fieldMask
};
Kode salah
Kode berikut tidak menghapus kolom target_cpa_micros, karena
menetapkan kolom ke 0. Utilitas FieldMasks dan server Google Ads API mengabaikan nilai ini jika TargetCpaMicros adalah 0 atau jika jalur dihilangkan dari mask, dan server tidak menampilkan error:
// Creates a campaign with the proper resource name and a
// MaximizeConversions object. Attempts to clear the target_cpa_micros
// field by setting it to 0.
Campaign campaign = new Campaign()
{
ResourceName = ResourceNames.Campaign(customerId, campaignId),
MaximizeConversions = new MaximizeConversions()
{
TargetCpaMicros = 0
}
};
// Constructs an operation using FieldMasks.AllSetFieldsOf to derive the
// update mask.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = FieldMasks.AllSetFieldsOf(campaign)
};
// Sends the operation in a mutate request that succeeds without clearing
// the previous 'target_cpa_micros' value cleanly.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });