Di Google Ads API, mask kolom digunakan untuk memberikan daftar kolom yang harus diperbarui oleh permintaan API. Kolom apa pun yang tidak ditentukan dalam mask kolom akan diabaikan, meskipun dikirim ke server.
Class FieldMaskUtil
Cara yang direkomendasikan untuk membuat mask kolom adalah dengan menggunakan class
FieldMaskUtil
bawaan, yang memungkinkan Anda membuat mask kolom dari objek yang diubah
daripada 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 tersebut, Anda akan mengubah kode untuk menggunakan metode FieldMasks.FromChanges
. Metode ini menghasilkan mask kolom yang merepresentasikan
perbedaan antara dua objek.
Campaign existingCampaign;
// Obtain existingCampaign from elsewhere.
...
// Create a new campaign based off 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)
};
Cara menangani error FieldMaskError.FIELD_HAS_SUBFIELDS
Terkadang, Anda mungkin perlu menyetel kolom tanpa memperbarui sub-kolom jenis tersebut. 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 akan gagal dengan error FieldMaskError.FIELD_HAS_SUBFIELDS
.
Karena MaximizeConversions
memiliki tiga sub-kolom, server Google Ads API mengharapkan mask kolom untuk kolom tersebut ada dalam permintaan. Namun, FieldMaskUtil
tidak dapat membuat mask kolom dengan benar dalam situasi ini, karena permintaan tidak menetapkan kolom ini.
Dalam kasus tersebut, Anda dapat mengedit mask kolom secara manual sebagai berikut:
// 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 here:
// https://developers.google.com/google-ads/api/docs/campaigns/bidding/assign-strategies
fieldMask.Paths.AddRange(new string[] {
"maximize_conversions.target_cpa_micros",
});
// Creates an operation to update the campaign with the specified fields.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = fieldMask
};
Cara menghapus kolom
Google Ads API mendukung penghapusan beberapa nilai kolom. Untuk mengosongkan kolom, Anda harus menetapkan mask kolom untuk kolom tersebut secara manual. Menetapkan kolom ke nilai defaultnya (seperti nol 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 kita
menetapkan maximize_conversions.target_cpa_micros
di mask kolom dan
tidak menetapkan kolomcampaign.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 will
// clear this field from the bidding strategy without impacting any other fields
// on the bidding strategy.
FieldMask fieldMask = FieldMasks.AllSetFieldsOf(campaign);
fieldMask.Paths.AddRange(new string[] {
"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 kita
menyetel kolom ini ke nol. Server FieldMaskUtils
dan Google Ads API akan mengabaikan nilai ini. Selain itu, Anda mungkin tidak menerima
error dalam kasus ini, karena nilai diabaikan oleh server.
// Creates a campaign with the proper resource name and a MaximizeConversions
// object. Attempt 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 the FieldMasks' AllSetFieldsOf utility to
// derive the update mask. However, the field mask will NOT include
// 'maximize_conversions.target_cpa_micros'.
CampaignOperation operation = new CampaignOperation()
{
Update = campaign,
UpdateMask = FieldMasks.AllSetFieldsOf(campaign)
};
// Sends the operation in a mutate request that will succeed but will NOT update
// the 'target_cpa_micros' field because 'maximize_conversions.target_cpa_micros'
// was not included in the field mask.
MutateCampaignsResponse response = campaignService.MutateCampaigns(
customerId.ToString(), new CampaignOperation[] { operation });